安卓开发编写计算器(工具 android studio)

问题:编写一个计算器。

用网格布局编写界面:

activity_main.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:rowCount="6"
    android:columnCount="4" >
    <!--一个6行4列的布局-->
<!--文本标签显示输入的等式-->
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_marginLeft="4dp"
        android:gravity="left"
        android:id="@+id/input"
        android:textSize="30dp"/>
    <!--计算器按钮0-9,+-*/和删除-->
    <Button
        android:id="@+id/button_delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
        android:textSize="26sp"
        />
    <Button android:id="@+id/button1" android:text="1" android:textSize="26sp"/>
    <Button android:id="@+id/button2" android:text="2" android:textSize="26sp"/>
    <Button android:id="@+id/button3" android:text="3" android:textSize="26sp"/>
    <Button android:id="@+id/button_add" android:text="+" android:textSize="26sp"/>
    <Button android:id="@+id/button4" android:text="4" android:textSize="26sp"/>
    <Button android:id="@+id/button5" android:text="5" android:textSize="26sp"/>
    <Button android:id="@+id/button6" android:text="6" android:textSize="26sp"/>
    <Button android:id="@+id/button_minus" android:text="-" android:textSize="26sp"/>
    <Button android:id="@+id/button7" android:text="7" android:textSize="26sp"/>
    <Button android:id="@+id/button8" android:text="8" android:textSize="26sp"/>
    <Button android:id="@+id/button9" android:text="9" android:textSize="26sp"/>
    <Button android:id="@+id/button_mul" android:text="*" android:textSize="26sp"/>
    <Button android:id="@+id/button_point" android:text="." android:textSize="26sp"/>
    <Button android:id="@+id/button0" android:text="0" android:textSize="26sp"/>
    <Button android:id="@+id/button_equal" android:text="=" android:textSize="26sp"/>
    <Button android:id="@+id/button_div" android:text="/" android:textSize="26sp"/>

</GridLayout>

MainActivity.java 文件的代码:

package com.jiancai.counter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    EditText input;
    Button btn_0;
    Button btn_1;
    Button btn_2;
    Button btn_3;
    Button btn_4;
    Button btn_5;
    Button btn_6;
    Button btn_7;
    Button btn_8;
    Button btn_9;
    Button btn_add;
    Button btn_minus;
    Button btn_mul;
    Button btn_div;
    Button btn_point;
    Button btn_equal;
    Button btn_del;//组件的定义
    boolean del_flag;   //清空标识
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        input=(EditText)findViewById(R.id.input);
        btn_0=(Button)findViewById((R.id.button0));
        btn_1=(Button)findViewById((R.id.button1));
        btn_2=(Button)findViewById((R.id.button2));
        btn_3=(Button)findViewById((R.id.button3));
        btn_4=(Button)findViewById((R.id.button4));
        btn_5=(Button)findViewById((R.id.button5));
        btn_6=(Button)findViewById((R.id.button6));
        btn_7=(Button)findViewById((R.id.button7));
        btn_8=(Button)findViewById((R.id.button8));
        btn_9=(Button)findViewById((R.id.button9));
        btn_add=(Button)findViewById((R.id.button_add));
        btn_minus=(Button)findViewById((R.id.button_minus));
        btn_mul=(Button)findViewById((R.id.button_mul));
        btn_div=(Button)findViewById((R.id.button_div));
        btn_equal=(Button)findViewById((R.id.button_equal));
        btn_point=(Button)findViewById((R.id.button_point));
        btn_del=(Button)findViewById((R.id.button_delete));   //组件的获取
        btn_0.setOnClickListener(this);//设置按钮点击事件
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_add.setOnClickListener(this);
        btn_minus.setOnClickListener(this);
        btn_mul.setOnClickListener(this);
        btn_div.setOnClickListener(this);
        btn_equal.setOnClickListener(this);
        btn_point.setOnClickListener(this);
        btn_del.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {  //按钮触发器的设置
        String str =input.getText().toString();
        switch (v.getId()){  //获取view的id,选择按钮
            case R.id.button0 :
            case R.id.button1 :
            case R.id.button2 :
            case R.id.button3 :
            case R.id.button4 :
            case R.id.button5 :
            case R.id.button6 :
            case R.id.button7 :
            case R.id.button8 :
            case R.id.button9 :
            case R.id.button_point :
                if (del_flag) {
                    del_flag = false;
                    str = "";
                    input.setText("");
                }
                input.setText(str+((Button)v).getText());
                break;
            case R.id.button_add :
            case R.id.button_minus:
            case R.id.button_mul:
            case R.id.button_div :
                if(del_flag){
                    del_flag=false;
                    str="";
                    input.setText("");
                }
                input.setText(str+" "+((Button)v).getText()+" ");
                break;

            case R.id.button_delete:
                del_flag=false;
                str="";
                input.setText("");
            case R.id.button_equal :
                getResult();
                break;
        }

    }

    private void getResult() {
        String exp =input.getText().toString();
        if(exp==null||exp.equals("")){  //exp为空
            return;
        }
        if(!exp.contains(" ")){
            return;
        }
        if(del_flag){
            del_flag=false;
            return;
        }
        del_flag=true;
        double result=0;
        String s1=exp.substring(0,exp.indexOf(" ")); // 获取输入的第一个数
        String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//获取运算符
        String s2=exp.substring(exp.indexOf(" ")+3);// 获取输入的第二个数
        if(!s1.equals(" ")&&!s2.equals(" ")) { //s1,s2不为空
            double d1 = Double.parseDouble(s1); //把第一个数的字符串转化为数字
            double d2 = Double.parseDouble(s2);//把第二个数的字符串转化为数字
            if (op.equals("+")) {  //op为+,就进行加法运算
                result = d1 + d2;
            } else if (op.equals("-")) {//op为-,就进行减法运算
                result = d1 - d2;
            } else if (op.equals("*")) {//op为*,就进行乘法运算
                result = d1 * d2;
            } else if (op.equals("/")) {//op为/,就进行除法运算
                if (d2 == 0) {
                    result = 0;
                } else
                    result = d1 / d2;
            }
            if (s1.contains(".") && s2.contains(".")) {
                double r =  result;
                input.setText(r + "");
            } else
                input.setText(result + "");}
         else if (s1.equals(" ")&&!s2.equals(" ")){
            double d2=Double.parseDouble(s2);
            if (op.equals("+")) {
                result = 0 + d2;
            } else if (op.equals("-")) {
                result = 0 - d2;
            } else if (op.equals("*")) {
                result = 0;
            } else if (op.equals("/")) {
                result=0;
            }
            if (s2.contains(".")){
                double r= result;
                input.setText(r+"");
            } else {
                input.setText(result+"");
            }
        }else{
            input.setText("");
        }
    }
}

结果截图:

加法运算

安卓开发编写计算器(工具 android studio)

安卓开发编写计算器(工具 android studio)

减法运算:

安卓开发编写计算器(工具 android studio)

安卓开发编写计算器(工具 android studio)

乘法运算:

安卓开发编写计算器(工具 android studio)

安卓开发编写计算器(工具 android studio)

除法运算:

安卓开发编写计算器(工具 android studio)

安卓开发编写计算器(工具 android studio)