1 Android计算器布局calculator_main.xml最易用TableLayout或LinearLayout实现
1.1TableLayout布局.
`
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:oriention="vertical"
tools:context=".CalculatorActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:oriention="horizontal">
<Button
android:id="@+id/num7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7" />
<Button
android:id="@+id/num8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8" />
<Button
android:id="@+id/num9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9" />
<Button
android:id="@+id/divide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:oriention="horizontal">
<Button
android:id="@+id/num4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4" />
<Button
android:id="@+id/num5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5" />
<Button
android:id="@+id/num6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6" />
<Button
android:id="@+id/multiply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:oriention="horizontal">
<Button
android:id="@+id/num0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0" />
<Button
android:id="@+id/dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="." />
<Button
android:id="@+id/plus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+" />
<Button
android:id="@+id/equal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="=" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:oriention="horizontal">
<Button
android:id="@+id/backplace"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="backplace" />
<Button
android:id="@+id/clear"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="clear" />
</LinearLayout>
</LinearLayout>
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;//标志是否收到按等号信息
@Override
protected 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);
}
@Override
public 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;
}
}
}