package com.example.df.firstapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; //引用按钮组件 import android.widget.EditText; //引用文本编辑框组件 import android.text.TextUtils; //TextUtils类用于处理字符串 //定义实现监听接口的类MainActivity public class MainActivity extends AppCompatActivity implements View.OnClickListener { //声明17个按钮和一个文本编辑框 Button bt_num0,bt_num1,bt_num2,bt_num3,bt_num4,bt_num5,bt_num6,bt_num7, bt_num8,bt_num9,bt_delete,bt_div,bt_mult,bt_minus,bt_plus,bt_equal,bt_dot,bt_clear; private EditText et_calc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //显示activity_main.xml定义的用户界面 initViewAndListener(); //调用函数initViewAndListener() } //定义函数initViewAndListener(),用于与用户界面程序中的组件建立关联,并分别注册监听接口 private void initViewAndListener() { bt_num0 = (Button)findViewById(R.id.bt_num0); bt_num0.setOnClickListener(this); bt_num1 = (Button)findViewById(R.id.bt_num1); bt_num1.setOnClickListener(this); bt_num2 =(Button) findViewById(R.id.bt_num2); bt_num2.setOnClickListener(this); bt_num3 = (Button)findViewById(R.id.bt_num3); bt_num3.setOnClickListener(this); bt_num4 = (Button)findViewById(R.id.bt_num4); bt_num4.setOnClickListener(this); bt_num5 = (Button)findViewById(R.id.bt_num5); bt_num5.setOnClickListener(this); bt_num6 = (Button)findViewById(R.id.bt_num6); bt_num6.setOnClickListener(this); bt_num7 = (Button)findViewById(R.id.bt_num7); bt_num7.setOnClickListener(this); bt_num8 = (Button)findViewById(R.id.bt_num8); bt_num8.setOnClickListener(this); bt_num9 = (Button)findViewById(R.id.bt_num9); bt_num9.setOnClickListener(this); bt_delete = (Button)findViewById(R.id.bt_delete); bt_delete.setOnClickListener(this); bt_div = (Button)findViewById(R.id.bt_div); bt_div.setOnClickListener(this); bt_mult = (Button)findViewById(R.id.bt_mult); bt_mult.setOnClickListener(this); bt_minus = (Button)findViewById(R.id.bt_minus); bt_minus.setOnClickListener(this); bt_plus = (Button)findViewById(R.id.bt_plus); bt_plus.setOnClickListener(this); bt_equal = (Button)findViewById(R.id.bt_equal); bt_equal.setOnClickListener(this); et_calc = (EditText)findViewById(R.id.et_calc); bt_dot = (Button)findViewById(R.id.bt_dot); bt_dot.setOnClickListener(this); bt_clear = (Button)findViewById(R.id.bt_clear); bt_clear.setOnClickListener(this); } private boolean lastIsOperator; //记录当前是否进行计算操作 private String lastOperators = ""; //记录上一次进行计算操作的结果 private double firstNumber = 0D; //定义并初始化第一次的取值 private double sencondNumber = 0D; //定义并初始化第二次的取值 //onClick()方法,触发OnClickListener接口 public void onClick(View v) { String currentText = et_calc.getText().toString(); //获取当前文本编辑框的内容 String operatorNumber = ""; //定义并初始化操作数为”” if (currentText.equals("0")) { //若当前输入数为0则设置文本编辑框为”” et_calc.setText(""); } operatorNumber = et_calc.getText().toString(); //根据编辑框的内容更改操作数值 if(!lastOperators.equals("")) //判断上一次操作的数是否为空,非空则建立索引,随之修改当前操作数 { int index = operatorNumber.lastIndexOf(lastOperators); operatorNumber = operatorNumber.substring(index+1); } //分别获取按钮的内容至文本编辑框 switch (v.getId()) { case R.id.bt_num0: et_calc.setText(et_calc.getText() + "0"); lastIsOperator = false; break; case R.id.bt_num1: et_calc.setText(et_calc.getText() + "1"); lastIsOperator = false; break; case R.id.bt_num2: et_calc.setText(et_calc.getText() + "2"); lastIsOperator = false; break; case R.id.bt_num3: et_calc.setText(et_calc.getText() + "3"); lastIsOperator = false; break; case R.id.bt_num4: et_calc.setText(et_calc.getText() + "4"); lastIsOperator = false; break; case R.id.bt_num5: et_calc.setText(et_calc.getText() + "5"); lastIsOperator = false; break; case R.id.bt_num6: et_calc.setText(et_calc.getText() + "6"); lastIsOperator = false; break; case R.id.bt_num7: et_calc.setText(et_calc.getText() + "7"); lastIsOperator = false; break; case R.id.bt_num8: et_calc.setText(et_calc.getText() + "8"); lastIsOperator = false; break; case R.id.bt_num9: et_calc.setText(et_calc.getText() + "9"); lastIsOperator = false; break; case R.id.bt_dot: et_calc.setText(et_calc.getText() + "."); lastIsOperator = false; break; //归零按钮,将当前操作数直接清零 case R.id.bt_clear: et_calc.setText(""); lastIsOperator = false; firstNumber=0D; sencondNumber=0D; lastOperators="="; break; //清除按钮,若当前文本编辑框内容为空,点击一次则删除一个字符串 case R.id.bt_delete: if (TextUtils.isEmpty(et_calc.getText())) { return; } lastIsOperator = false; et_calc.setText(currentText.substring(0, currentText.length() - 1).length() > 0 ? currentText.substring(0, currentText.length() - 1) : "0"); break; //计算按钮,若当前内容非空、或者以及上一次有操作记录且记录不是”=”的情况下,将当前的操作记录设置为+、-、*、/、= case R.id.bt_div: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"÷"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "÷"); lastOperators = "÷"; break; case R.id.bt_mult: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"*"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "*"); lastOperators = "*"; break; case R.id.bt_minus: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"-"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "-"); lastOperators = "-"; break; case R.id.bt_plus: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"+"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "+"); lastOperators = "+"; break; case R.id.bt_equal: double result = 0D; if(TextUtils.isEmpty(lastOperators)) { return; } opratorResult(operatorNumber); sencondNumber = 0D; lastOperators ="="; lastIsOperator = true; et_calc.setText(et_calc.getText() + "\n=" + String.valueOf(firstNumber)); break; } } //运算函数,按具体操作进行+、-、*、/的运算 private void operate(String operatorNumber) { if(sencondNumber != 0D) //计算情况一:第二次输入的数不为0 { if(lastOperators.equals("÷")) { sencondNumber = sencondNumber / Double.parseDouble(operatorNumber); firstNumber = firstNumber / sencondNumber; } else if(lastOperators.equals("*")) { sencondNumber = sencondNumber * Double.parseDouble(operatorNumber); firstNumber = firstNumber * sencondNumber; } else if(lastOperators.equals("+")) { sencondNumber = Double.parseDouble(operatorNumber); firstNumber = firstNumber + sencondNumber; } else if(lastOperators.equals("-")) { sencondNumber = Double.parseDouble(operatorNumber); firstNumber = firstNumber - sencondNumber; } } Else //计算情况二:第二次输入的数为0 { if(lastOperators.equals("÷")) { firstNumber = firstNumber / Double.parseDouble(operatorNumber); } else if(lastOperators.equals("*")) { firstNumber = firstNumber * Double.parseDouble(operatorNumber); } else if(lastOperators.equals("+")) { firstNumber = firstNumber + Double.parseDouble(operatorNumber); } else if(lastOperators.equals("-")) { firstNumber= firstNumber - Double.parseDouble(operatorNumber); } } } //分别返回计算结果 public void opratorResult(String operatorNumber) { operate(operatorNumber); } //按当前计算结果进行下一次的数据输入及计算 public void opratorCalc(String operatorNumber,String currentOprator) { if(TextUtils.isEmpty(lastOperators)) { firstNumber = Double.parseDouble(operatorNumber); return; } if(lastOperators.equals(currentOprator)) { if(lastOperators.equals("÷")) { firstNumber = firstNumber / Double.parseDouble(operatorNumber); } else if(lastOperators.equals("*")) { firstNumber = firstNumber * Double.parseDouble(operatorNumber); } else if(lastOperators.equals("+")) { firstNumber = firstNumber + Double.parseDouble(operatorNumber); } else if(lastOperators.equals("-")) { firstNumber = firstNumber - Double.parseDouble(operatorNumber); } return; } operate(operatorNumber); } } //布局文件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="wrap_content" android:columnCount="4" //设置了一个4列6行的网格 android:rowCount="6" tools:context=".MainActivity"> <EditText android:id="@+id/et_calc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_columnSpan="4" //该组件占据4列的位置 android:layout_marginLeft="4px" android:gravity="left" android:layout_row="0" android:background="#eee" android:textSize="50dip"/> <Button android:id="@+id/bt_delete" android:layout_column="3" android:layout_row="1" android:text="清除" android:textSize="26sp"/> <Button android:id="@+id/bt_clear" android:layout_column="0" android:layout_row="1" android:text="归零" android:textSize="26sp"/> <Button android:id="@+id/bt_num1" android:layout_column="0" android:layout_row="2" android:text="1" android:textSize="26sp"/> <Button android:id="@+id/bt_num2" android:layout_column="1" android:layout_row="2" android:text="2" android:textSize="26sp"/> <Button android:id="@+id/bt_num3" android:layout_column="2" android:layout_row="2" android:text="3" android:textSize="26sp"/> <Button android:id="@+id/bt_plus" android:layout_column="3" android:layout_row="2" android:text="+" android:textSize="26sp"/> <Button android:id="@+id/bt_num4" android:layout_column="0" android:layout_row="3" android:text="4" android:textSize="26sp" /> <Button android:id="@+id/bt_num5" android:layout_column="1" android:layout_row="3" android:text="5" android:textSize="26sp"/> <Button android:id="@+id/bt_num6" android:layout_column="2" android:layout_row="3" android:text="6" android:textSize="26sp"/> <Button android:id="@+id/bt_minus" android:layout_column="3" android:layout_row="3" android:text="-" android:textSize="26sp" /> <Button android:id="@+id/bt_num7" android:layout_column="0" android:layout_row="4" android:text="7" android:textSize="26sp"/> <Button android:id="@+id/bt_num8" android:layout_column="1" android:layout_row="4" android:text="8" android:textSize="26sp"/> <Button android:id="@+id/bt_num9" android:layout_column="2" android:layout_row="4" android:text="9" android:textSize="26sp" /> <Button android:id="@+id/bt_mult" android:layout_column="3" android:layout_row="4" android:text="*" android:textSize="26sp" /> <Button android:id="@+id/bt_dot" android:layout_column="0" android:layout_row="5" android:text="." android:textSize="26sp" /> <Button android:id="@+id/bt_num0" android:layout_column="1" android:layout_row="5" android:text="0" android:textSize="26sp" /> <Button android:id="@+id/bt_equal" android:layout_column="2" android:layout_row="5" android:text="=" android:textSize="26sp" /> <Button android:id="@+id/bt_div" android:layout_column="3" android:layout_row="5" android:text="/" android:textSize="26sp" /> </GridLayout>
原文:https://www.cnblogs.com/1234zz/p/13750768.html