安卓简易计算器

注:本app是一个安卓简易计算器,只能进行一步运算。

       在界面设计区域中设置一个6行4列的网格布局,第1行为显示数据的文本标签,第2行为清除数据的按钮,第3~6行均划分为4列,共安排16个按钮,分别代表数字0、1、2、......、9及加、减、乘、除、等号等符号。

设计布局文件activity_easy_calculator.xml:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:rowCount="6"
    android:columnCount="4"
>

    <TextView
        android:id="@+id/textView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_marginLeft="4px"
        android:layout_gravity="left"
        android:text=""
        android:textSize="50dip" />

    <Button
        android:id="@+id/clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_columnWeight="4"
        android:text="清除"
        android:textSize="26sp" />
     <Button
         android:id="@+id/one"
         android:text="1"
         android:textSize="26sp" />
    <Button
        android:id="@+id/two"
        android:text="2"
        android:textSize="26sp" />
    <Button
        android:id="@+id/three"
        android:text="3"
        android:textSize="26sp" />
    <Button
        android:id="@+id/plus"
        android:text="+"
        android:textSize="26sp" />
    <Button
        android:id="@+id/four"
        android:text="4"
        android:textSize="26sp" />
    <Button
        android:id="@+id/five"
        android:text="5"
        android:textSize="26sp" />
    <Button
        android:id="@+id/six"
        android:text="6"
        android:textSize="26sp" />
    <Button
        android:id="@+id/minus"
        android:text="-"
        android:textSize="26sp" />
    <Button
        android:id="@+id/seven"
        android:text="7"
        android:textSize="26sp" />
    <Button
        android:id="@+id/eight"
        android:text="8"
        android:textSize="26sp" />
    <Button
        android:id="@+id/nine"
        android:text="9"
        android:textSize="26sp" />
    <Button
        android:id="@+id/multiply"
        android:text="*"
        android:textSize="26sp" />
    <Button
        android:id="@+id/point"
        android:text="."
        android:textSize="26sp" />
    <Button
        android:id="@+id/zero"
        android:text="0"
        android:textSize="26sp" />
    <Button
        android:id="@+id/equal"
        android:text="="
        android:textSize="26sp" />
    <Button
        android:id="@+id/divided"
        android:text="/"
        android:textSize="26sp" />

</GridLayout>

设计控制文件EasycalCulator.java:

package com.example.administrator.easycalculator;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.Toast;

import java.util.ArrayList;

public class EasyCalculator extends AppCompatActivity {
    private TextView textView;
    private Button button_clear;
    private Button button_1;
    private Button button_2;
    private Button button_3;
    private Button button_4;
    private Button button_5;
    private Button button_6;
    private Button button_7;
    private Button button_8;
    private Button button_9;
    private Button button_0;
    private Button button_point;
    private Button button_plus;
    private Button button_minus;
    private Button button_multiply;
    private Button button_divided;
    private Button button_equal;
    private ClickListener clickListener;
    private String operator;
    private boolean flag;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_easy_calculator);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        //与组件建立关联
        textView=findViewById(R.id.textView);
        button_clear=findViewById(R.id.clear);
        button_1=findViewById(R.id.one);
        button_2=findViewById(R.id.two);
        button_3=findViewById(R.id.three);
        button_4=findViewById(R.id.four);
        button_5=findViewById(R.id.five);
        button_6=findViewById(R.id.six);
        button_7=findViewById(R.id.seven);
        button_8=findViewById(R.id.eight);
        button_9=findViewById(R.id.nine);
        button_0=findViewById(R.id.zero);
        button_point=findViewById(R.id.point);
        button_plus=findViewById(R.id.plus);
        button_minus=findViewById(R.id.minus);
        button_multiply=findViewById(R.id.multiply);
        button_divided=findViewById(R.id.divided);
        button_equal=findViewById(R.id.equal);
        clickListener=new ClickListener();
        operator=new String();
        flag=true;
        //为按钮注册监听接口
        button_clear.setOnClickListener(clickListener);
        button_1.setOnClickListener(clickListener);
        button_2.setOnClickListener(clickListener);
        button_3.setOnClickListener(clickListener);
        button_4.setOnClickListener(clickListener);
        button_5.setOnClickListener(clickListener);
        button_6.setOnClickListener(clickListener);
        button_7.setOnClickListener(clickListener);
        button_8.setOnClickListener(clickListener);
        button_9.setOnClickListener(clickListener);
        button_0.setOnClickListener(clickListener);
        button_point.setOnClickListener(clickListener);
        button_plus.setOnClickListener(clickListener);
        button_minus.setOnClickListener(clickListener);
        button_multiply.setOnClickListener(clickListener);
        button_divided.setOnClickListener(clickListener);
        button_equal.setOnClickListener(clickListener);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_easy_calculator, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /*
    * 定义实现监听接口的内部类
    * */
    class ClickListener implements OnClickListener{
        public void onClick(View v){
            switch(v.getId()) {
                case R.id.one:
                    textView.append("1");
                    break;
                case R.id.two:
                    textView.append("2");
                    break;
                case R.id.three:
                    textView.append("3");
                    break;
                case R.id.four:
                    textView.append("4");
                    break;
                case R.id.five:
                    textView.append("5");
                    break;
                case R.id.six:
                    textView.append("6");
                    break;
                case R.id.seven:
                    textView.append("7");
                    break;
                case R.id.eight:
                    textView.append("8");
                    break;
                case R.id.nine:
                    textView.append("9");
                    break;
                case R.id.zero:
                    textView.append("0");
                    break;
                case R.id.point:
                    textView.append(".");
                    break;
                case R.id.plus:
                    textView.append("+");
                    operator="+";
                    break;
                case R.id.minus:
                    textView.append("-");
                    operator="-";
                    break;
                case R.id.multiply:
                    textView.append("*");
                    operator="*";
                    break;
                case R.id.divided:
                    textView.append("/");
                    operator="/";
                    break;
                case R.id.clear:
                    textView.setText("");
                    break;
                case R.id.equal:
                    double sum=calculate();
                    textView.setText(""+sum);
                    break;
            }
        }
        /*
        * 计算结果
        * */
        private double calculate(){
            double sum=0;
            String regex="[^0-9|.]+"; //正则表达式,匹配数字和点字符
            String string=textView.getText().toString(); //获取表达式
            String[] num=string.split(regex); //从表达式里获取数字
           switch(operator){
               case "+":
                   sum=Double.parseDouble(num[0])+Double.parseDouble(num[1]);
                   break;
               case "-":
                   sum=Double.parseDouble(num[0])-Double.parseDouble(num[1]);
                   break;
               case "*":
                   sum=Double.parseDouble(num[0])*Double.parseDouble(num[1]);
                   break;
               case "/":
                   if(Double.parseDouble(num[1])==0){ //当进行除法运算时判断除数是否为0
                       sum=0;
                       break;
                   }
                   sum=Double.parseDouble(num[0])/Double.parseDouble(num[1]);
                   break;
           }
            return sum;
        }
    }

}

效果展示:

安卓简易计算器
界面
安卓简易计算器
输入表达式
安卓简易计算器
得出结果