本文共 5700 字,大约阅读时间需要 19 分钟。
1 Android计算器布局calculator_main.xml最易用TableLayout或LinearLayout实现
1.1TableLayout布局. `2计算器实现关键在于CalculatorActivity.java
“`
package leesh.calculator;import android.app.Activity;
import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;public class CalculatorActivity extends Activity implements OnClickListener{
private TextView tv; private Button[] num=new Button[10]; private Button multiply,divide,plus,minus,dot,equal,backplace,clear; //声明两个参数。接收tvResult前后的值 double num1=0,num2=0; double Result=0;//计算结果 int op=0;//判断操作数 Boolean isClickEqual=false;//标志是否收到按等号信息@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculator); //**根据android设置实现原理,通过组件在R文件的ID找到组件的控制权** tv=(TextView)findViewById(R.id.textView1); num[0]=(Button)findViewById(R.id.num0); num[1]=(Button)findViewById(R.id.num1); num[2]=(Button)findViewById(R.id.num2); num[3]=(Button)findViewById(R.id.num3); num[4]=(Button)findViewById(R.id.num4); num[5]=(Button)findViewById(R.id.num5); num[6]=(Button)findViewById(R.id.num6); num[7]=(Button)findViewById(R.id.num7); num[8]=(Button)findViewById(R.id.num8); num[9]=(Button)findViewById(R.id.num9); plus=(Button)findViewById(R.id.plus); minus=(Button)findViewById(R.id.minus); multiply=(Button)findViewById(R.id.multiply); divide=(Button)findViewById(R.id.divide); dot=(Button)findViewById(R.id.dot); equal=(Button)findViewById(R.id.equal); backplace=(Button)findViewById(R.id.backplace); clear=(Button)findViewById(R.id.clear);
// 给按钮加监听器,获取其值
// 数字按钮加监听器 for(int i=0;i<10;i++){ num[i].setOnClickListener(this); } // 加减乘除添加监听器 multiply.setOnClickListener(this); divide.setOnClickListener(this); plus.setOnClickListener(this); minus.setOnClickListener(this); // 小数点,等号,backplace,clear添加监听器 dot.setOnClickListener(this); equal.setOnClickListener(this); backplace.setOnClickListener(this); clear.setOnClickListener(this); }@Overridepublic void onClick(View v){//**Button,TextView等组件都是View的子类,此v是上转型对象** switch(v.getId()){//**此处使用开关通过v的ID号对应接受按键消息,进而处理**
// Backplane,clear to be deal with
case R.id.backplace: String str=tv.getText().toString(); try { tv.setText(str.substring(0, str.length()-1)); } catch (Exception e) { tv.setText(“”); } break; case R.id.clear: tv.setText(null); break; // 数字0—9获取 // for(int i=0;i<10;i++){}后续还要探索尽量勿穷举 case R.id.num0: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr=tv.getText().toString(); mystr+=”0”; tv.setText(mystr); break; case R.id.num1: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr1=tv.getText().toString(); mystr1+=”1”; tv.setText(mystr1); break; case R.id.num2: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr2=tv.getText().toString(); mystr2+=”2”; tv.setText(mystr2); break; case R.id.num3: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr3=tv.getText().toString(); mystr3+=”3”; tv.setText(mystr3); break; case R.id.num4: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr4=tv.getText().toString(); mystr4+=”4”; tv.setText(mystr4); break; case R.id.num5: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr5=tv.getText().toString(); mystr5+=”5”; tv.setText(mystr5); break; case R.id.num6: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr6=tv.getText().toString(); mystr6+=”6”; tv.setText(mystr6); break; case R.id.num7: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr7=tv.getText().toString(); mystr7+=”7”; tv.setText(mystr7); break; case R.id.num8: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr8=tv.getText().toString(); mystr8+=”8”; tv.setText(mystr8); break; case R.id.num9: if(isClickEqual){ tv.setText(null); isClickEqual=false; } String mystr9=tv.getText().toString(); mystr9+=”9”; tv.setText(mystr9); break; // 加减乘除等符号处理 case R.id.plus: String myStrAdd=tv.getText().toString(); if(myStrAdd.equals(null)) return; num1=Double.valueOf(myStrAdd); tv.setText(null); op=1; isClickEqual=false; break; case R.id.minus: String myStrSub=tv.getText().toString(); if(myStrSub.equals(null)) return; num1=Double.valueOf(myStrSub); tv.setText(null); op=2; isClickEqual=false; break; case R.id.multiply: String myStrMultiply=tv.getText().toString(); if(myStrMultiply.equals(null)) return; num1=Double.valueOf(myStrMultiply); tv.setText(null); op=3; isClickEqual=false; break; case R.id.divide: String myStrDiv=tv.getText().toString(); if(myStrDiv.equals(null)) return; num1=Double.valueOf(myStrDiv); tv.setText(null); op=4; isClickEqual=false; break; case R.id.equal://get EqualButton information String myStrEqual=tv.getText().toString(); if(myStrEqual.equals(null)) return; num2=Double.valueOf(myStrEqual); tv.setText(null); switch (op) {//收到等号后消息后,处理四则运算 case 0: Result=num2; break; case 1: Result=num1+num2; break; case 2: Result=num1-num2; break; case 3: Result=num1*num2; break; case 4: Result=num1/num2; break; default: Result=0; break; } tv.setText(String.valueOf(Result)); //String.valueOf(Result)强制转换后输出正确信息 isClickEqual=true; break; default: break; } } }转载地址:http://tmkji.baihongyu.com/