Androidstudio简易计算器实现

Android 简易计算器可以通过以下步骤实现加减乘除功能

  1. 在布局文件中添加数字输入框和运算符按钮,并为它们设置相应的点击事件监听器。

  2. 在点击事件监听器中,获取用户输入的数字和运算符,并根据运算符进行相应的计算。可以将计算结果显示在屏幕上,或者将其保存到本地存储中。

  3. 如果需要支持多个操作数和运算符,可以在布局文件中添加更多的数字输入框和运算符按钮,并为它们设置相应的点击事件监听器。

  4. 如果需要支持退格、清除等特殊功能,可以在点击事件监听器中添加相应的逻辑。

1. 涉及到的知识点

  1. ConstraintLayout约束布局的使用
  2. 基础控件Button,EditText的使用

2. 先看效果图

基本功能:加,减,乘,除
请添加图片描述

3. 代码实现过程

  1. 先把计算器布局样式写出来:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity"
    tools:ignore="MissingConstraints">


    <EditText
        android:id="@+id/et_input"
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:gravity="right|center"
        android:hint="请输入"
        android:paddingRight="5dp"
        android:paddingBottom="5dp"
        android:textSize="50sp" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cconstraintLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        app:layout_constraintTop_toBottomOf="@id/et_input">

        <Button
            android:id="@+id/btn_clr"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="C"
            android:textSize="30sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/btn_del" />

        <Button
            android:id="@+id/btn_del"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="D"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_clr"
            app:layout_constraintRight_toLeftOf="@id/btn_div" />

        <Button
            android:id="@+id/btn_div"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="÷"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_del"
            app:layout_constraintRight_toLeftOf="@id/btn_mul" />

        <Button
            android:id="@+id/btn_mul"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="×"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_div"
            app:layout_constraintRight_toRightOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>


    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cconstraintLayout2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        app:layout_constraintTop_toBottomOf="@id/cconstraintLayout1">

        <Button
            android:id="@+id/btn_7"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="7"
            android:textSize="30sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/btn_8" />

        <Button
            android:id="@+id/btn_8"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="8"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_7"
            app:layout_constraintRight_toLeftOf="@id/btn_9" />

        <Button
            android:id="@+id/btn_9"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="9"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_8"
            app:layout_constraintRight_toLeftOf="@id/btn_sub" />

        <Button
            android:id="@+id/btn_sub"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="-"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_9"
            app:layout_constraintRight_toRightOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cconstraintLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        app:layout_constraintTop_toBottomOf="@id/cconstraintLayout2">

        <Button
            android:id="@+id/btn_4"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:paddingRight="15sp"
            android:paddingBottom="15sp"
            android:text="4"
            android:textSize="30sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/btn_5" />

        <Button
            android:id="@+id/btn_5"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="5"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_4"
            app:layout_constraintRight_toLeftOf="@id/btn_6" />

        <Button
            android:id="@+id/btn_6"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="6"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_5"
            app:layout_constraintRight_toLeftOf="@id/btn_add" />

        <Button
            android:id="@+id/btn_add"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="+"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_6"
            app:layout_constraintRight_toRightOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>


    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cconstraintLayout4"
        android:layout_width="match_parent"
        android:layout_height="195dp"
        app:layout_constraintTop_toBottomOf="@id/cconstraintLayout3">

        <Button
            android:id="@+id/btn_1"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="1"
            android:textSize="30sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/btn_2" />


        <Button
            android:id="@+id/btn_2"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="2"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_1"
            app:layout_constraintRight_toLeftOf="@id/btn_3" />


        <Button
            android:id="@+id/btn_3"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="3"
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_2"
            app:layout_constraintRight_toLeftOf="@id/btn_eq" />


        <Button
            android:id="@+id/btn_eq"
            android:layout_width="80dp"
            android:layout_height="170dp"
            android:text="="
            android:textSize="30sp"
            app:layout_constraintLeft_toRightOf="@id/btn_3"
            app:layout_constraintRight_toRightOf="parent" />


        <Button
            android:id="@+id/btn_0"
            android:layout_width="0dp"
            android:layout_height="80dp"
            android:text="0"
            android:textSize="30sp"
            app:layout_constraintLeft_toLeftOf="@id/btn_1"
            app:layout_constraintRight_toRightOf="@id/btn_2"
            app:layout_constraintTop_toBottomOf="@id/btn_1" />


        <Button
            android:id="@+id/btn_pt"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="."
            android:textSize="30sp"
            app:layout_constraintBottom_toBottomOf="@id/btn_0"
            app:layout_constraintLeft_toLeftOf="@id/btn_3"
            app:layout_constraintLeft_toRightOf="@id/btn_3" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
  1. MainActivity.java中具体实现

1. 初始化控件

    //初始化控件
        btn_0 = (Button) findViewById(R.id.btn_0);
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_9 = (Button) findViewById(R.id.btn_9);
        btn_pt = (Button) findViewById(R.id.btn_pt);
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_sub = (Button) findViewById(R.id.btn_sub);
        btn_mul = (Button) findViewById(R.id.btn_mul);
        btn_div = (Button) findViewById(R.id.btn_div);
        btn_clr = (Button) findViewById(R.id.btn_clr);
        btn_del = (Button) findViewById(R.id.btn_del);
        btn_eq = (Button) findViewById(R.id.btn_eq);
        et_input = (EditText) findViewById(R.id.et_input);

2. 给按钮设置的点击事件

  //给按钮设置的点击事件
        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_pt.setOnClickListener(this);
        btn_add.setOnClickListener(this);
        btn_sub.setOnClickListener(this);
        btn_mul.setOnClickListener(this);
        btn_div.setOnClickListener(this);
        btn_clr.setOnClickListener(this);
        btn_del.setOnClickListener(this);
        btn_eq.setOnClickListener(this);

3. 这个代码实现过程

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_pt;
    Button btn_mul, btn_div, btn_add, btn_sub;
    Button btn_clr, btn_del, btn_eq;
    EditText et_input;
    boolean clr_flag;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化控件
        btn_0 = (Button) findViewById(R.id.btn_0);
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_9 = (Button) findViewById(R.id.btn_9);
        btn_pt = (Button) findViewById(R.id.btn_pt);
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_sub = (Button) findViewById(R.id.btn_sub);
        btn_mul = (Button) findViewById(R.id.btn_mul);
        btn_div = (Button) findViewById(R.id.btn_div);
        btn_clr = (Button) findViewById(R.id.btn_clr);
        btn_del = (Button) findViewById(R.id.btn_del);
        btn_eq = (Button) findViewById(R.id.btn_eq);
        et_input = (EditText) findViewById(R.id.et_input);

        //给按钮设置的点击事件
        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_pt.setOnClickListener(this);
        btn_add.setOnClickListener(this);
        btn_sub.setOnClickListener(this);
        btn_mul.setOnClickListener(this);
        btn_div.setOnClickListener(this);
        btn_clr.setOnClickListener(this);
        btn_del.setOnClickListener(this);
        btn_eq.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        String str = et_input.getText().toString();
        switch (v.getId()) {
            case R.id.btn_0:
            case R.id.btn_1:
            case R.id.btn_2:
            case R.id.btn_3:
            case R.id.btn_4:
            case R.id.btn_5:
            case R.id.btn_6:
            case R.id.btn_7:
            case R.id.btn_8:
            case R.id.btn_9:
            case R.id.btn_pt:
                if (clr_flag) {
                    clr_flag = false;
                    str = "";
                    et_input.setText("");
                }
                et_input.setText(str + ((Button) v).getText());
                break;
            case R.id.btn_add:
            case R.id.btn_sub:
            case R.id.btn_mul:
            case R.id.btn_div:
                if (clr_flag) {
                    clr_flag = false;
                    str = "";
                    et_input.setText("");
                }
                if (str.contains("+") || str.contains("-") || str.contains("×") || str.contains("÷")) {
                    str = str.substring(0, str.indexOf(" "));
                }
                et_input.setText(str + " " + ((Button) v).getText() + " ");
                break;
            case R.id.btn_clr:
                if (clr_flag)
                    clr_flag = false;
                str = "";
                et_input.setText("");
                break;
            case R.id.btn_del: //判断是否为空,然后在进行删除
                if (clr_flag) {
                    clr_flag = false;
                    str = "";
                    et_input.setText("");
                } else if (str != null && !str.equals("")) {
                    et_input.setText(str.substring(0, str.length() - 1));
                }
                break;
            case R.id.btn_eq: //单独运算最后结果
                getResult();//调用下面的方法
                break;
        }


    }

    private void getResult() {
        String exp = et_input.getText().toString();
        if (exp == null || exp.equals("")) return;
        //因为没有运算符所以不用运算
        if (!exp.contains(" ")) {
            return;
        }
        if (clr_flag) {
            clr_flag = false;
            return;
        }
        clr_flag = true;
        //截取运算符前面的字符串
        String s1 = exp.substring(0, exp.indexOf(" "));
        //截取的运算符
        String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);
        //截取运算符后面的字符串
        String s2 = exp.substring(exp.indexOf(" ") + 3);
        double cnt = 0;
        if (!s1.equals("") && !s2.equals("")) {
            double d1 = Double.parseDouble(s1);
            double d2 = Double.parseDouble(s2);
            if (op.equals("+")) {
                cnt = d1 + d2;
            }
            if (op.equals("-")) {
                cnt = d1 - d2;
            }
            if (op.equals("×")) {
                cnt = d1 * d2;
            }
            if (op.equals("÷")) {
                if (d2 == 0) cnt = 0;
                else cnt = d1 / d2;
            }
            if (!s1.contains(".") && !s2.contains(".") && !op.equals("÷")) {
                int res = (int) cnt;
                et_input.setText(res + "");
            } else {
                et_input.setText(cnt + "");
            }
        }
        //如果s1是空    s2不是空  就执行下一步
        else if (!s1.equals("") && s2.equals("")) {
            double d1 = Double.parseDouble(s1);
            if (op.equals("+")) {
                cnt = d1;
            }
            if (op.equals("-")) {
                cnt = d1;
            }
            if (op.equals("×")) {
                cnt = 0;
            }
            if (op.equals("÷")) {
                cnt = 0;
            }
            if (!s1.contains(".")) {
                int res = (int) cnt;
                et_input.setText(res + "");
            } else {
                et_input.setText(cnt + "");
            }
        }
        //如果s1是空    s2不是空  就执行下一步
        else if (s1.equals("") && !s2.equals("")) {
            double d2 = Double.parseDouble(s2);
            if (op.equals("+")) {
                cnt = d2;
            }
            if (op.equals("-")) {
                cnt = 0 - d2;
            }
            if (op.equals("×")) {
                cnt = 0;
            }
            if (op.equals("÷")) {
                cnt = 0;
            }
            if (!s2.contains(".")) {
                int res = (int) cnt;
                et_input.setText(res + "");
            } else {
                et_input.setText(cnt + "");
            }
        } else {
            et_input.setText("");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩宇软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值