版权声明:为中华之崛起而读书。转载请注明出处: https://blog.csdn.net/Kj_Gym/article/details/82697914
一、啥也不说,先看效果
二、再来看一下目录结构吧:
三、源码:
.java文件
package com.kjgym.mycalculatorv10;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class CalculatorActivity extends AppCompatActivity implements View.OnClickListener {
private EditText EV_Result; // 结果框
private double currentResult = 0.0; // 存储数字及结果
private boolean firstDigit = true; // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private String operator = "="; // 当前运算的运算符
private boolean operateValidFlag = true; // 操作是否合法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
// 控件初始化及添加监听事件
this.init();
}
/**
* 点击事件重载方法
* @param v 当前点击的控件
*/
@Override
public void onClick(View v) {
String pre = ((Button) v).getText().toString();
Log.i("TAG", pre);
switch (v.getId()) {
case R.id.Btn_Back:
setBtn_Back();
break;
case R.id.Btn_C:
setBtn_C();
break;
case R.id.Btn_Num0:
case R.id.Btn_Num1:
case R.id.Btn_Num2:
case R.id.Btn_Num3:
case R.id.Btn_Num4:
case R.id.Btn_Num5:
case R.id.Btn_Num6:
case R.id.Btn_Num7:
case R.id.Btn_Num8:
case R.id.Btn_Num9:
case R.id.Btn_DecimalPoint:
setNum(pre);
break;
case R.id.Btn_Subtraction:
case R.id.Btn_Addition:
case R.id.Btn_ModuloDivision:
case R.id.Btn_Multiplication:
case R.id.Btn_Division:
case R.id.Btn_Equal:
setOperator(pre);
break;
}
}
/**
* 点击运算符处理
* @param label 接收当前点击的运算符
*/
public void setOperator(String label) {
switch (operator){
case "/":
// 除法运算
// 如果当前结果文本框中的值等于0
if (getNumFromEV_Result() == 0.0) {
// 操作不合法
operateValidFlag = false;
EV_Result.setText("除数不能为零!");
} else {
currentResult /= getNumFromEV_Result();
}
break;
case "+":
// 加法运算
currentResult += getNumFromEV_Result();
break;
case "-":
// 减法运算
currentResult -= getNumFromEV_Result();
break;
case "*":
// 加法运算
currentResult *= getNumFromEV_Result();
break;
case "%":
// 加法运算
currentResult %= getNumFromEV_Result();
break;
case "=":
// 赋值运算
currentResult = getNumFromEV_Result();
break;
}
if (operateValidFlag) {
// 双精度浮点数的运算
long t1;
double t2;
t1 = (long) currentResult;
t2 = currentResult - t1;
if (t2 == 0) {
EV_Result.setText(String.valueOf(t1));
} else {
EV_Result.setText(String.valueOf(currentResult));
}
}
// 运算符等于用户按的按钮
operator = label;
firstDigit = true;
operateValidFlag = true;
}
/**
* 点击数字处理
* @param n 接收当前点击的数字
*/
public void setNum(String n) {
if (firstDigit) {
// 输入的第一个数字
EV_Result.setText(n);
} else if ((n.equals(".")) && (!EV_Result.getText().toString().contains("."))) {
// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
String str = EV_Result.getText().toString();
str += ".";
EV_Result.setText(str);
} else if (!n.equals(".")) {
// 如果输入的不是小数点,则将数字附在结果文本框的后面
String str = EV_Result.getText().toString();
str += n;
EV_Result.setText(str);
}
// 以后输入的肯定不是第一个数字了
firstDigit = false;
}
/**
* 从文本框中获取数字
*
* @return result
*/
public double getNumFromEV_Result() {
double result = 0;
try {
result = Double.valueOf(EV_Result.getText().toString());
} catch (NumberFormatException e) {
Log.i("TAG","您输入的不是数字");
}
return result;
}
/**
* 设置清空C键
*/
public void setBtn_C() {
EV_Result.setText("0");
firstDigit = true;
operator = "=";
}
/**
* 设置返回Back键
*/
public void setBtn_Back() {
String currentResult = EV_Result.getText().toString();
int i = currentResult.length();
if (i > 0) {
currentResult = currentResult.substring(0, i - 1); // 将文本最后一个字符去掉
if (currentResult.length() == 0) { // 如果没有了内容,初始化计算器的各种值
EV_Result.setText("0");
} else {
EV_Result.setText(currentResult); // 显示新的文本
}
}
}
/**
* 初始化控件
*/
public void init() {
EV_Result = findViewById(R.id.EV_result);
// 第一行
Button Btn_C; // 清空结果框
Button Btn_Back; // 返回
Button Btn_ModuloDivision; // 模除
Button Btn_Division; // 除法
// 第二行
Button Btn_Num7;
Button Btn_Num8;
Button Btn_Num9;
Button Btn_Multiplication; // 乘发
// 第三行
Button Btn_Num4;
Button Btn_Num5;
Button Btn_Num6;
Button Btn_Subtraction; // 减法
// 第四行
Button Btn_Num1;
Button Btn_Num2;
Button Btn_Num3;
Button Btn_Addition; // 加法
// 第五行
Button Btn_Num0;
Button Btn_DecimalPoint; // 小数点
Button Btn_Equal; // 等于
Btn_C = findViewById(R.id.Btn_C);
Btn_Back = findViewById(R.id.Btn_Back);
Btn_ModuloDivision = findViewById(R.id.Btn_ModuloDivision);
Btn_Division = findViewById(R.id.Btn_Division);
Btn_Num7 = findViewById(R.id.Btn_Num7);
Btn_Num8 = findViewById(R.id.Btn_Num8);
Btn_Num9 = findViewById(R.id.Btn_Num9);
Btn_Multiplication = findViewById(R.id.Btn_Multiplication);
Btn_Num4 = findViewById(R.id.Btn_Num4);
Btn_Num5 = findViewById(R.id.Btn_Num5);
Btn_Num6 = findViewById(R.id.Btn_Num6);
Btn_Subtraction = findViewById(R.id.Btn_Subtraction);
Btn_Num1 = findViewById(R.id.Btn_Num1);
Btn_Num2 = findViewById(R.id.Btn_Num2);
Btn_Num3 = findViewById(R.id.Btn_Num3);
Btn_Addition = findViewById(R.id.Btn_Addition);
Btn_Num0 = findViewById(R.id.Btn_Num0);
Btn_DecimalPoint = findViewById(R.id.Btn_DecimalPoint);
Btn_Equal = findViewById(R.id.Btn_Equal);
Btn_C.setOnClickListener(this);
Btn_Back.setOnClickListener(this);
Btn_ModuloDivision.setOnClickListener(this);
Btn_Division.setOnClickListener(this);
Btn_Num7.setOnClickListener(this);
Btn_Num8.setOnClickListener(this);
Btn_Num9.setOnClickListener(this);
Btn_Multiplication.setOnClickListener(this);
Btn_Num4.setOnClickListener(this);
Btn_Num5.setOnClickListener(this);
Btn_Num6.setOnClickListener(this);
Btn_Subtraction.setOnClickListener(this);
Btn_Num1.setOnClickListener(this);
Btn_Num2.setOnClickListener(this);
Btn_Num3.setOnClickListener(this);
Btn_Addition.setOnClickListener(this);
Btn_Num0.setOnClickListener(this);
Btn_DecimalPoint.setOnClickListener(this);
Btn_Equal.setOnClickListener(this);
}
}
.xml文件
<?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"
android:orientation="vertical"
tools:context=".CalculatorActivity">
<!-- 结果 -->
<EditText
android:id="@+id/EV_result"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="right"
android:cursorVisible="false"
android:textSize="25sp"
android:paddingBottom="0dp"
android:text="0" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4">
<Button
android:id="@+id/Btn_C"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear"/>
<Button
android:id="@+id/Btn_Back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Back"/>
<Button
android:id="@+id/Btn_ModuloDivision"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="%"/>
<Button
android:id="@+id/Btn_Division"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"/>
<Button
android:id="@+id/Btn_Num7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7"/>
<Button
android:id="@+id/Btn_Num8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"/>
<Button
android:id="@+id/Btn_Num9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9"/>
<Button
android:id="@+id/Btn_Multiplication"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*"/>
<Button
android:id="@+id/Btn_Num4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"/>
<Button
android:id="@+id/Btn_Num5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"/>
<Button
android:id="@+id/Btn_Num6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"/>
<Button
android:id="@+id/Btn_Subtraction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"/>
<Button
android:id="@+id/Btn_Num1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"/>
<Button
android:id="@+id/Btn_Num2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"/>
<Button
android:id="@+id/Btn_Num3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"/>
<Button
android:id="@+id/Btn_Addition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"/>
<Button
android:id="@+id/Btn_Num0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:text="0"/>
<Button
android:id="@+id/Btn_DecimalPoint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="."/>
<Button
android:id="@+id/Btn_Equal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="/>
</GridLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="20sp"
android:weightSum="10">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="6"
android:text="本程序由Kj纯手工独自打造。。。"
android:layout_marginTop="40dp"
android:gravity="center_horizontal"
android:textSize="20sp"
android:textStyle="bold"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/cj"
android:layout_weight="4"
android:layout_marginTop="10px"
android:scaleType="center"
/>
</LinearLayout>
</LinearLayout>