Android简单计算器的实现

本案例实现了具有加减乘除功能的计算器,效果图如下:

Android简单计算器的实现

涉及到的知识点主要有:利用表格布局实现计算器页面,监听计算器按钮的点击

实现的具体过程如下:

创建一个Android项目,修改mainActive.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_ji_suan02"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.whs.sample01_1_activity.JiSuanActivity02">
    
    <TextView            
    android:id="@+id/loginxx"            
    android:layout_width="80dp"            
    android:layout_height="30dp"            
    android:layout_gravity="center"            
    android:layout_marginBottom="30dp"            
    android:layout_marginTop="50dp" /> 
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:textSize="50dp"
        android:text="0"
        android:textColor="#ff0000"
        android:gravity="center_vertical|right"
        android:layout_marginRight="5dp"
        android:layout_marginLeft="5dp"
        android:background="#ffffffff" 
        />
    <!--7 8 9 + -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:orientation="horizontal"
        >

        <Button
            android:id="@+id/Button07"
            android:text="7"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/Button08"
            android:text="8"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/Button09"
            android:text="9"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/ButtonJia"
            android:text="+"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />

    </LinearLayout>

    <!--4 5 6 - -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:orientation="horizontal"
        >

        <Button
            android:id="@+id/Button04"
            android:text="4"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/Button05"
            android:text="5"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/Button06"
            android:text="6"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/ButtonJian"
            android:text="-"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />

    </LinearLayout>

    <!--1 2 3 * -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:orientation="horizontal"
        >

        <Button
            android:id="@+id/Button01"
            android:text="1"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/Button02"
            android:text="2"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/Button03"
            android:text="3"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/ButtonCheng"
            android:text="*"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />

    </LinearLayout>

    <!--0 C = / -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:orientation="horizontal"
        >

        <Button
            android:id="@+id/Button00"
            android:text="0"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/ButtonC"
            android:text="C"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/ButtonDeng"
            android:text="="
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />
        <Button
            android:id="@+id/ButtonChu"
            android:text="/"
            android:textSize="28dp"
            android:layout_width="90dp"
            android:layout_height="60dp" />

    </LinearLayout>

</LinearLayout>

修改mainActive.java代码如下:

package com.example.counter.hfeng;

import android.provider.Settings;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    TextView tv;
    int[] buttons;      //数字按钮数组
    float result;
    float result0;
    float  result1;

    //按钮对象声明
    Button buttonC;
    Button buttonJia;
    Button buttonJian;
    Button buttonCheng;
    Button buttonChu;
    Button buttonDengyu;

    String str1;    //旧输入的值
    String str2;    //新输入的值

    int flag=0;     //计算标志位,0第一次输入;1加; 2减; 3乘; 4除; 5等于
    Button temp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initButton();
        //清空按钮点击事件
        buttonC.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                str1 = "";
                str2 = "";
                tv.setText("0");
                result = 0;
                result1 = 0;
                result0 = 0;
                flag = 0;
            }
        });

        //监听
        for(int i=0;i<8;i++){
        for (int i1 = 0; i1 < buttons.length; i1++){
            temp = getBtnForId(buttons[i1]);
            temp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (flag != 0){//不是第一次
                        str1 = "";
                    }else {//第一次
                    	
                        str1 = tv.getText().toString().trim();
                        if (str1.equals("0")){
                            str1 = "";
                        }
                    }
                    
                    	
                    	str1 = str1 + String.valueOf(((Button)view).getText()); //获取新值
                    	tv.setText(str1);
                    }
               
            });
        }
        }
        buttonListener(buttonJia, 1);
        buttonListener(buttonJian, 2);
        buttonListener(buttonCheng, 3);
        buttonListener(buttonChu, 4);
        for(int i=0;i<8;i++){
            for (int i1 = 0; i1 < buttons.length; i1++){
                temp = getBtnForId(buttons[i1]);
                temp.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                         //第一次
                        	
                            str1 = tv.getText().toString().trim();
                            if (str1.equals("0")){
                                str1 = "";
                            }
                        
                        	str1 = str1 + String.valueOf(((Button)view).getText()); //获取新值
                        	tv.setText(str1);
                        }
                   
                });
            }
            }
        buttonDengyu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                result1 = Integer.parseInt(str1);

                if (flag == 1){
                    result = result0 + result1;
                }else if (flag == 2){
                    result = result0 - result1;
                }else if (flag == 3){
                    result = result0 * result1;
                }else if (flag == 4){
                    if (result1 == 0){
                        Toast.makeText(MainActivity.this, "除数不能为0", Toast.LENGTH_SHORT).show();
                    }else {
                        result = result0 / result1;
                    }

                }else if (flag == 0){
                    result = result1;
                }
                String str = (result + "").trim();

                if (result1 == 0 && flag == 4){
                    str = "除数不能为0";
                }else{
                tv.setText(str);
                Toast.makeText(MainActivity.this, "结果是:" + result, Toast.LENGTH_SHORT).show();
            }
            }
        });
    }

    //初始化控件资源
    public void initButton(){
        tv = (TextView)this.findViewById(R.id.tv);
        str1 = String.valueOf(tv.getText());
        str2 = "";
        buttonC = getBtnForId(R.id.ButtonC);
        buttonJia = getBtnForId(R.id.ButtonJia);
        buttonJian = getBtnForId(R.id.ButtonJian);
        buttonCheng = getBtnForId(R.id.ButtonCheng);
        buttonChu = getBtnForId(R.id.ButtonChu);
        buttonDengyu = getBtnForId(R.id.ButtonDeng);

        buttons = new int[]{
                R.id.Button00,R.id.Button01,R.id.Button02,
                R.id.Button03,
                R.id.Button04,R.id.Button05,R.id.Button06,
                R.id.Button07,R.id.Button08,R.id.Button09
        };
    }
    //根据id获取Button
    public Button getBtnForId(int rID){
        Button btn = (Button)this.findViewById(rID);
        return btn;
    }
    //按钮监听
    public void buttonListener(Button button, final int id){
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String str = tv.getText().toString().trim();
                result0 = Float.parseFloat(str);
                
                tv.setText("0");
                flag = id;
            }
        });
    }
}