Android

Android小程序之简易计算器

勤劳的小蜜蜂 · 1月26日 · 2019年 · ·

效果

先来看下实际效果图。

关键代码

此项目只需要写MainActivity和activity_main.xml

activity_main.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/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="计算器"
        android:textAppearance="?android:attr/textAppearanceLarge"/>

    <TextView
        android:id="@+id/formula"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium"/>

    <TextView
        android:id="@+id/result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Clear"/>

        <Button
            android:id="@+id/backspace"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Backspace"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="7"/>

        <Button
            android:id="@+id/btn8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="8"/>

        <Button
            android:id="@+id/btn9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="9"/>

        <Button
            android:id="@+id/except"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="/"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="4"/>

        <Button
            android:id="@+id/btn5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="5"/>

        <Button
            android:id="@+id/btn6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="6"/>

        <Button
            android:id="@+id/multiply"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="*"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1"/>

        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="2"/>

        <Button
            android:id="@+id/btn3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="3"/>

        <Button
            android:id="@+id/subtract"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="-"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/dot"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="."/>

        <Button
            android:id="@+id/error"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="0"/>

        <Button
            android:id="@+id/equal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="="/>

        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="+"/>
    </LinearLayout>

</LinearLayout>

MainActivity

import android.media.MediaCodec;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.TextureView;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.widget.Toast;

import java.util.regex.Matcher;
import  java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity  implements View.OnClickListener{

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

        tvFormula=(TextView)this.findViewById(R.id.formula);
        tvFormula.setText("");

        tvResult=(TextView)this.findViewById(R.id.result);
        tvResult.setText("");
        Button button;
        button=(Button)this.findViewById(R.id.btn1);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn2);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn3);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn4);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn5);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn6);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn7);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn8);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.btn9);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.clear);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.backspace);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.except);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.dot);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.subtract);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.multiply);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.add);
        button.setOnClickListener(this);


        button=(Button)this.findViewById(R.id.error);
        button.setOnClickListener(this);

        button=(Button)this.findViewById(R.id.equal);
        button.setOnClickListener(this);



    }

    @Override
    public void onClick(View v) {
        Button b=(Button)v;
        String s=b.getText().toString();

        switch (v.getId()){
            case R.id.clear:
                tvFormula.setText("");
                tvResult.setText("");
                break;
            case R.id.backspace:
                if((tvFormula.getText().toString().length() - 1)>0&&((tvResult.getText().toString().length() - 1)>0)) {
                    tvFormula.setText(tvFormula.getText().toString().substring(0, tvFormula.getText().toString().length() - 1));
                    tvResult.setText(tvResult.getText().toString().substring(0, tvResult.getText().toString().length() - 1));
                }else{
                    tvFormula.setText("0");
                    tvResult.setText("0");
                }
                break;
            case R.id.equal:
                Pattern p= Pattern.compile("([\\d\\.]+)([\\+\\-\\*/])([\\d\\.]+)");
                Matcher m=p.matcher(tvResult.getText().toString());

                if(m.find()){
                    String op1=m.group(1);
                    String op2=m.group(2);
                    String op3=m.group(3);

                    double f0=0;
                    double f1=Double.parseDouble(op1);
                    double f2=Double.parseDouble(op3);

                    if("+".equals(op2)){
                        f0=f1+f2;
                    }else if("-".equals(op2)){
                        f0=f1-f2;
                    }else if("*".equals(op2)){
                        f0=f1*f2;
                    }else if("/".equals(op2)){
                        f0=f1/f2;
                    }
                    tvResult.setText(""+f0);
                }else {
                    Toast.makeText(this,"输入的公式有错。",Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                tvFormula.setText(tvFormula.getText().toString()+s);
                tvResult.setText(tvResult.getText().toString()+s);
                break;
        }
    }
}

源码下载

我使用的AndroidStudio是目前最新版3.2.1

2 条回应
  1. 匿名2021-1-4 · 13:58

    真棒

  2. 匿名2020-6-24 · 18:17

    做的好