Android计算器实现源码分析

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;
}
}
}

    原文作者:Android源码分析
    原文地址: https://blog.csdn.net/shenghuaDay/article/details/51265205
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞