用Android自带组件写计算器

用Android自带组件写计算器

首先制作一款单activity的Android app需要
①一个UI界面。
②对UI界面中相应的组件绑定对应操作。

UI界面

一个计算器需要9个数字,及其基本的运算符号,和一个能显示输入和结果的显示屏。数字和运算符号都可用Button组件,二显示则可用TextView组件来实现。
这里给大家展示下笔者的源码
内联代码片

// An highlighted block
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_gravity="bottom">
  <TextView
      android:id="@+id/tv"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="3"
      android:text=""
      android:textSize="60dp"
      android:hint=""/>
  <LinearLayout
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:orientation="horizontal">
      <Button
          android:id="@+id/btn7"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="7"
          android:textSize="60dp" />
      <Button
          android:id="@+id/btn8"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="8"
          android:textSize="60dp"/>
      <Button
          android:id="@+id/btn9"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="9"
          android:textSize="60dp"/>
      <Button
          android:id="@+id/btnDe"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="←"
          android:textSize="60dp"/>
      <Button
          android:id="@+id/btnc"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="C"
          android:textSize="60dp"/>
  </LinearLayout>
      <LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_weight="1">
        <Button
            android:id="@+id/btn4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="4"
            android:textSize="60dp"/>
          <Button
              android:id="@+id/btn5"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="5"
              android:textSize="60dp"/>
          <Button
              android:id="@+id/btn6"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="6"
              android:textSize="60dp"/>
          <Button
              android:id="@+id/btna"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="+"
              android:textSize="60dp"/>
          <Button
              android:id="@+id/btnd"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="-"
              android:textSize="60dp"/>
      </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1">
        <Button
            android:id="@+id/btn1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1"
            android:textSize="60dp"/>
        <Button
            android:id="@+id/btn2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="2"
            android:textSize="60dp"/>
        <Button
            android:id="@+id/btn3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="3"
            android:textSize="60dp"/>
        <Button
            android:id="@+id/btnm"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="*"
            android:textSize="60dp"/>
        <Button
            android:id="@+id/btndvs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="/"
            android:textSize="60dp"/>
    </LinearLayout>
   <LinearLayout
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_weight="1">
       <Button
           android:id="@+id/btn0"
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="0"
           android:textSize="60dp" />
       <Button
           android:id="@+id/btnmd"
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="%"
           android:textSize="60dp"/>
       <Button
           android:id="@+id/btnA"
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="A"
           android:textSize="60dp"/>
       <Button
           android:id="@+id/btne"
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_weight="2"
           android:text="="
           android:textSize="60dp"/>
   </LinearLayout>


在这里插入图片描述
这里为了让组件对得整齐些特意为一些组件的 android:layout_width设置为0dp与fill_parent。

Java代码

打开默认的MianActivity,为UI界面中的组件绑定监听事件,源码如下:
下面展示一些 内联代码片

// An highlighted block
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.myapplication.math;

public class MainActivity extends AppCompatActivity {
    String str="";
    String str2="";
    int m;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button btn0=(Button) findViewById(R.id.btn0);
        final Button btn1=(Button) findViewById(R.id.btn1);
        final Button btn2=(Button) findViewById(R.id.btn2);
        final Button btn3=(Button) findViewById(R.id.btn3);
        final Button btn4=(Button) findViewById(R.id.btn4);
        final Button btn5=(Button) findViewById(R.id.btn5);
        final Button btn6=(Button) findViewById(R.id.btn6);
        final Button btn7=(Button) findViewById(R.id.btn7);
        final Button btn8=(Button) findViewById(R.id.btn8);
        final Button btn9=(Button) findViewById(R.id.btn9);
        final Button btnc=(Button) findViewById(R.id.btnc);
        final Button btna=(Button) findViewById(R.id.btna);
        final Button btnd=(Button) findViewById(R.id.btnd);
        final Button btnm=(Button) findViewById(R.id.btnm);
        final Button btndvs=(Button) findViewById(R.id.btndvs);
        final Button btnmd=(Button) findViewById(R.id.btnmd);
        final Button btnA=(Button) findViewById(R.id.btnA);
        final Button btne=(Button) findViewById(R.id.btne);
        final Button btnDe=(Button) findViewById(R.id.btnDe);
        final TextView tv=(TextView) findViewById(R.id.tv );
        final math math=new math();

        btn0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(str.equals("")){
                    str="0";
                    tv.setText("0");
                }
                else if (str.equals("0")){}
                else
                    {
                    tv.setText(str + 0);
                    str = tv.getText().toString();
                     }
            }
        });
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"1");
                str=tv.getText().toString();
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"2");
                str=tv.getText().toString();
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"3");
                str=tv.getText().toString();
            }
        });

        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"4");
                str=tv.getText().toString();
            }
        });

        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                tv.setText(str+"5");
                str=tv.getText().toString();
            }
        });

        btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"6");
                str=tv.getText().toString();
            }
        });

        btn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"7");
                str=tv.getText().toString();
            }
        });

        btn8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"8");
                str=tv.getText().toString();
            }
        });

        btn9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(str+"9");
                str=tv.getText().toString();
            }
        });
        btnDe.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                str=math.getDe(str);
                tv.setText(str);
            }
        });
        btnc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                str="";
                str2="";
                tv.setText("");
            }
        });

        btna.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (str.equals(""))
                {}
                else
                    {
                    str2 = str;
                    str = "";
                    tv.setText("");
                    m = 1;
                     }
            }
        });

        btnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (str.equals("")){
                    str=str+"-";
                    tv.setText(str);
                }
                else {
                    str2 = str;
                    str = "";
                    tv.setText("");
                    m = 2;
                    }
            }
        });
        btnm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (str.equals("")){}
                else {
                    str2 = str;
                    str = "";
                    tv.setText("");
                    m = 3;
                }
            }
        });
        btndvs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (str.equals("")){}
                else {
                    str2 = str;
                    str = "";
                    tv.setText("");
                    m = 4;
                }
            }
        });
        btnmd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (str.equals("")){}
                else {
                    str2 = str;
                    str = "";
                    tv.setText("");
                    m = 5;
                }
                }
        });
        btnA.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(str2.equals(""))
                {
                    tv.setText(math.getfactorial(str));
                    str="";
                }
            }
        });
        btne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(str.equals("")||str2.equals(""))
                {
                }
                else
                {
                    tv.setText(math.getResult(str, str2, m));
                    str = "";
                    str2 = "";
                }
            }
        });
    }
}

这里说一下因为0、负数和空串的干扰需要对一些组件添加额外的判断语句。
因为不想在MainActivity中出现过于繁杂的代码,笔者还额外自定义了个math类用于计算。源码如下:

// An highlighted block
package com.example.myapplication;

public class math {
    public String getfactorial(String str)
    {
        Double number1=Double.parseDouble(str);
        Double number2=1.0;
        if (number1>=0) {
            for (int i = 1; number1 >= i; i++) {
                number2 = i * number2;
            }
            str = str + "的阶乘是:" + number2.toString();
        }
        else{
            str="负数没有阶乘!";
        }
        return str;
    }
    public String getResult(String str2,String str,int m)
    {
        Double number1=Double.parseDouble(str);
        Double number2=Double.parseDouble(str2);
        Double number3;
        switch (m)
        {
            case 1:
                number3=number1+number2;
                str=str+"+"+str2+"="+number3.toString();
                break;
            case 2:
                number3=number1-number2;
                str=str+"-"+str2+"="+number3.toString();
                break;
            case 3:
                number3=number1*number2;
                str=str+"*"+str2+"="+number3.toString();
                break;
            case 4:
                number3=number1/number2;
                str=str+"/"+str2+"="+number3.toString();
                break;
            case 5:
                number3=number1%number2;
                str=str+"%"+str2+"="+number3.toString();
                break;
        }
        return str;
    }
    public String getDe(String str)
    {
        String str2 =str.substring(0,str.length()-1);
        return str2;
    }
}

这样一个简单的单activity程序就写好啦!你以为这样就结束了吗?no!计算机的功能难道就仅止于此了吗?它应该会有更漂亮的UI,简洁的实现代码和更强大的功能。这些都等着读者去实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值