通过Android4.0 网格布局GridLayout来实现一个简单的计算器界面布局   源码如下(欢迎大家指导 批评 )

https://github.com/xionglihui


源码下载地址:http://download.csdn.net/detail/x605940745/7148153

转载请注明出处:http://blog.csdn.net/x605940745



package com.android.xiong.gridlayoutTest;import java.math.BigDecimal;import java.util.regex.Pattern;import com.android.xiong.gridlayoutTest.R.id;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.GridLayout;import android.widget.TextView;public class MainActivity extends Activity {private EditText print;private static String fistNumber = "0";// 第一次输入的值private static String secondNumber = "0";// 第二次输入的值private static String num = "0";// 显示的结果private static int flg = 0;// 结果累加一次public Counts take = null;private int[] btidTake = { R.id.txtdivide, R.id.txtx, R.id.txtmin,R.id.txttakesum };private Button[] buttonTake = new Button[btidTake.length];private int[] btidNum = { R.id.txt0, R.id.txt1, R.id.txt2, R.id.txt3,R.id.txt4, R.id.txt5, R.id.txt6, R.id.txt7, R.id.txt8, R.id.txt9,R.id.txtspl };private Button[] buttons = new Button[btidNum.length];private int[] btcl = { R.id.chars, R.id.charx, R.id.txtb, R.id.txtv };private Button[] btcls = new Button[btcl.length];private GridLayout gly;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gly=(GridLayout)findViewById(R.id.gly);print = (EditText) findViewById(R.id.print);print.setText("0");print.setEnabled(false);GetNumber get = new GetNumber();for (int i = 0; i < btidNum.length; i++) {buttons[i] = (Button) findViewById(btidNum[i]);buttons[i].setOnClickListener(get);}Compute cm = new Compute();for (int i = 0; i < btidTake.length; i++) {buttonTake[i] = (Button) findViewById(btidTake[i]);buttonTake[i].setOnClickListener(cm);}Button eq = (Button) findViewById(R.id.txteq);eq.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (flg == 0) {secondNumber = print.getText().toString();if (take == Counts.DIVIDE && secondNumber.equals("0")) {print.setText("0不能为被除数");} else {num = take.Values(fistNumber, secondNumber);fistNumber = num;secondNumber = "0";print.setText(num);flg = 1;gly.setBackgroundResource(R.drawable.jz);}}}});Button cleargo = (Button) findViewById(R.id.cleargo);cleargo.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (num.length() > 1) {num = num.substring(0, num.length() - 1);} else {num = "0";}print.setText(num);}});Button clear = (Button) findViewById(R.id.clear);clear.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnum = "0";fistNumber = secondNumber = num;print.setText(num);flg = 0;}});for (int i = 0; i < btcl.length; i++) {btcls[i] = (Button) findViewById(btcl[i]);btcls[i].setOnClickListener(new OnTake());}}// 给 EditText赋值class GetNumber implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (flg == 1)num = "0";if (num.equals("0")) {print.setText("");num = v.getId() == R.id.txtspl ? "0" : "";}String txt = ((Button) v).getText().toString();boolean s = Pattern.matches("-*(\\d+).?(\\d)*", num + txt);num = s ? (num + txt) : num;gly.setBackgroundResource(R.drawable.js);print.setText(num);}}// 根据条件计算class Compute implements OnClickListener {@Overridepublic void onClick(View arg0) {fistNumber = print.getText().toString();// TODO Auto-generated method stubswitch (arg0.getId()) {case R.id.txttakesum:take = Counts.ADD;break;case R.id.txtmin:take = Counts.MINUS;break;case R.id.txtx:take = Counts.MULTIPLY;break;case R.id.txtdivide:take = Counts.DIVIDE;break;}num = "0";flg = 0;gly.setBackgroundResource(R.drawable.js);}}class OnTake implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.chars:num = "-" + num;break;case R.id.charx:if(!num.equals("0"))num = BigDecimal.valueOf(1).divide(new BigDecimal(num),12,BigDecimal.ROUND_UP).stripTrailingZeros().toString();break;case R.id.txtb:num = new BigDecimal(num).divide(BigDecimal.valueOf(100),12,BigDecimal.ROUND_UP).stripTrailingZeros().toString();break;case R.id.txtv:Double numss = Math.sqrt(new BigDecimal(num).doubleValue());int stratindex=numss.toString().contains(".")?numss.toString().indexOf("."):0;num = numss.toString().length()>13?numss.toString().substring(0, 12+stratindex):numss.toString();}print.setText(num);flg=0;num = "0";}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


package com.android.xiong.gridlayoutTest;import java.math.BigDecimal;public enum Counts {ADD, MINUS, MULTIPLY, DIVIDE, MARK, ROOT;public String Values(String num1, String num2) {BigDecimal number1 = new BigDecimal(num1);BigDecimal number2 = new BigDecimal(num2);BigDecimal number = BigDecimal.valueOf(0);switch (this) {case ADD:number = number1.add(number2);break;case MINUS:number = number1.subtract(number2);break;case MULTIPLY:number = number1.multiply(number2);break;case DIVIDE:number = number1.divide(number2,20,BigDecimal.ROUND_UP);break;}return number.stripTrailingZeros().toString();}}

        

   
   


更多相关文章

  1. android一些有用的网址
  2. eclipse 中绑定 android源码
  3. Android(安卓)Studio中获取MD5、SHA1、SHA256的方法
  4. Android(安卓)亲测源码分享
  5. android 经典文章收集
  6. 九宫格的实现及九宫格源码
  7. android ndk不支持宽字符转换
  8. Android(安卓)framework 源码分析一Activity启动流程(android 8.
  9. Mac下如何用USB调试Android真机

随机推荐

  1. android Drawable各种类型使用
  2. Android Studio Check for Update
  3. Android Tablet PC avec Android 4.1 Jel
  4. android中Handler的源码分析
  5. Android 各种布局技术-五大布局对象
  6. Android数据的四种存储方式SharedPrefere
  7. Android Camera (android2.2) 资料一
  8. android 关于tts的一些参数
  9. android原生项目整合ReactNative
  10. 搭建android测试环境