博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android计算器实现源码分析
阅读量:4059 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>
JS牛客网编译环境的使用
查看>>
9、VUE面经
查看>>
关于进制转换的具体实现代码
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>