Android入门学习——简易计算器

发布于 2023-10-10  649 次阅读


只看文字文档是无法快速上手的,所以打算写一个简易App上手,快速学习一些简单的知识点,循环渐进。本次参照Mac系统的计算器程序,模拟一个差不多的功能出来。

UI布局

参考一下我们的示例,感觉可以使用网格布局达到我们想要的效果,布局相关可以参考这里

file

网格布局

使用用单纯的网格布局,先做出一个想要的整体结构:

file

对应代码:

<?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=".MainActivity">
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:columnCount="4"
android:rowCount="6">
<TextView
android:id="@+id/tv_result"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="0"
android:textSize="80sp"
android:layout_columnSpan="4"
/>
<TextView
android:id="@+id/btn_ac"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="AC"/>
<TextView
android:id="@+id/btn_the"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="+/-"/>
<TextView
android:id="@+id/btn_percent"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="%"/>
<TextView
android:id="@+id/btn_divide"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="÷"/>
<TextView
android:id="@+id/btn_7"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="7"/>
<TextView
android:id="@+id/btn_8"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="8"/>
<TextView
android:id="@+id/btn_9"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="9"/>
<TextView
android:id="@+id/btn_multiplication"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="x"/>
<TextView
android:id="@+id/btn_4"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="4"/>
<TextView
android:id="@+id/btn_5"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="5"/>
<TextView
android:id="@+id/btn_6"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="6"/>
<TextView
android:id="@+id/btn_subtraction"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="-"/>
<TextView
android:id="@+id/btn_1"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="1"/>
<TextView
android:id="@+id/btn_2"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="2"/>
<TextView
android:id="@+id/btn_3"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="3"/>
<TextView
android:id="@+id/btn_add"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="+"/>
<TextView
android:id="@+id/btn_0"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:layout_columnSpan="2"
android:gravity="center"
android:textSize="20sp"
android:text="0"/>
<TextView
android:id="@+id/btn_dot"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="."/>
<TextView
android:id="@+id/btn_equal"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:textSize="20sp"
android:text="="/>
</GridLayout>
</LinearLayout>

加入颜色

结构有了,现在需要加入不同的颜色,还有间距,让其看起来好看一些:

file

优化布局

但这时发现在长一点的手机上,显然看起来不是很好看,显示数字的地方太小了,按钮占比又还很大,由于外部容器使用的是LinearLayout布局,所以这里可以做一点调整,我们可以使内容显示区域和键盘区域平分,这样就会美观一些,稍微做了一下改造,把数字显示区域从GridLayout中提出,单独用一个约束布局(为了让里面的文字右下角显示和一些其他额外布局)包裹起来,并且设置各自的权重layout_weight="1",这样就达到了我们想要的效果:

file

完整代码如下:

<?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"
android:background="#333"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:paddingRight="10dp"
tools:ignore="MissingConstraints">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center">
<TextView
android:id="@+id/tv_result"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="0"
android:textSize="80sp"
android:textColor="#eee"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:columnCount="4"
android:rowCount="6">
<TextView
android:id="@+id/btn_ac"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#444"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:text="AC"/>
<TextView
android:id="@+id/btn_the"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#444"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:text="+/-"/>
<TextView
android:id="@+id/btn_percent"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#444"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:text="%"/>
<TextView
android:id="@+id/btn_divide"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#f95"
android:textColor="#eee"
android:textSize="20sp"
android:text="÷"/>
<TextView
android:id="@+id/btn_7"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="7"/>
<TextView
android:id="@+id/btn_8"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="8"/>
<TextView
android:id="@+id/btn_9"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="9"/>
<TextView
android:id="@+id/btn_multiplication"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#f95"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginTop="1dp"
android:text="x"/>
<TextView
android:id="@+id/btn_4"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="4"/>
<TextView
android:id="@+id/btn_5"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="5"/>
<TextView
android:id="@+id/btn_6"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="6"/>
<TextView
android:id="@+id/btn_subtraction"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#f95"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginTop="1dp"
android:text="-"/>
<TextView
android:id="@+id/btn_1"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="1"/>
<TextView
android:id="@+id/btn_2"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="2"/>
<TextView
android:id="@+id/btn_3"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="3"/>
<TextView
android:id="@+id/btn_add"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#f95"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginTop="1dp"
android:text="+"/>
<TextView
android:id="@+id/btn_0"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:layout_columnSpan="2"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="0"/>
<TextView
android:id="@+id/btn_dot"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#555"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:text="."/>
<TextView
android:id="@+id/btn_equal"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:gravity="center"
android:background="#f95"
android:textColor="#eee"
android:textSize="20sp"
android:layout_marginTop="1dp"
android:text="="/>
</GridLayout>
</LinearLayout>

Activity编写

前端的简易UI布局写好了,现在我们进行Activity的编写,默认的activity_main.xml对应的Activity是MainActivity.java,可以从布局文件里的根节点的tools:context=".MainActivity"看出。

Activity的生命周期这些,可以参考这里
大致逻辑是这样:

  1. 定义一个计算的动作类,用来定义每个计算动作;
  2. 通过自带的方法findViewById,获取到对应的控件;
  3. 通过setBackgroundColor为每一个按钮绑定上对应的事件;
  4. 通过逻辑计算,把计算出来的结果显示到界面上;
  5. 按钮的时候,做一定的交互处理,如加减乘除的选中效果;

一、ComputeAction类如下:

public class ComputeAction {
/**
* 无
*/
public static final int NONE=0;
/**
* 清空
*/
public static final int AC=1;
/**
* 取反
*/
public static final int THE=2;
/**
* 百分比
*/
public static final int PERCENT=3;
/**
* 除
*/
public static final int DIVIDE=4;
/**
* 乘
*/
public static final int MULTIPLICATION=5;
/**
* 减
*/
public static final int SUBTRACTION=6;
/**
* 加
*/
public static final int ADD=7;
/**
* 小数点
*/
public static final int DOT=8;
/**
* 等于
*/
public static final int EQUAL=9;
}

二、获取到所有按钮和控件,由于数字按钮有统一性,所以我使用一个List来储存它,这样的话可以减少一定量的代码行数:

private void initView(){
tvResult=findViewById(R.id.tv_result);//结果显示组件
btnAc=findViewById(R.id.btn_ac);//清空按钮
btnThe=findViewById(R.id.btn_the);//取反按钮
btnPercent=findViewById(R.id.btn_percent);//百分比按钮
btnDivide=findViewById(R.id.btn_divide);//除
btnMultiplication=findViewById(R.id.btn_multiplication);//乘
btnSubtraction=findViewById(R.id.btn_subtraction);//减
btnAdd=findViewById(R.id.btn_add);//加
btnEqual=findViewById(R.id.btn_equal);//等
btnDot=findViewById(R.id.btn_dot);//小数点
//数字按钮,放到List里
listNumber.add(findViewById(R.id.btn_0));
listNumber.add(findViewById(R.id.btn_1));
listNumber.add(findViewById(R.id.btn_2));
listNumber.add(findViewById(R.id.btn_3));
listNumber.add(findViewById(R.id.btn_4));
listNumber.add(findViewById(R.id.btn_5));
listNumber.add(findViewById(R.id.btn_6));
listNumber.add(findViewById(R.id.btn_7));
listNumber.add(findViewById(R.id.btn_8));
listNumber.add(findViewById(R.id.btn_9));
}

三、然后给对应的按钮,绑定对应的事件:

private void initListener(){
//循环绑定数字按钮
for(TextView btnNumber:listNumber) {
btnNumber.setOnClickListener((View view)->{
handleNumberClick(Integer.parseInt(btnNumber.getText().toString()));//数字输入
});
}
btnAdd.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.ADD);
});
btnSubtraction.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.SUBTRACTION);
});
btnMultiplication.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.MULTIPLICATION);
});
btnDivide.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.DIVIDE);
});
btnEqual.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.EQUAL);
});
btnAc.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.AC);
});
btnPercent.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.PERCENT);
});
btnThe.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.THE);
});
btnDot.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.DOT);
});
}

四、计算逻辑
简易版本的计算逻辑,实现了基本的计算,但存在一些bug后续再进行完善。

输入数字,根据一个变量[clearInput]来判断是否是拼接数字还是清空数字:

private void handleNumberClick(Integer number){
String strOldResult=tvResult.getText().toString();
if(!clearInput) {
//当前没有按下计算按钮,显示的数字累加即可
if(strOldResult.equals("0")) {
strOldResult="";
}
tvResult.setText(strOldResult+number.toString());
clearInput=false;
return;
}
tvResult.setText(number+"");
clearInput=false;
}

输入运算符,进行简单的逻辑运算:

private Double handleCompute(Double oldNumber,Double number,int action){
BigDecimal hisNumber=new BigDecimal(oldNumber);//历史结果
BigDecimal newNumber=new BigDecimal(number);//输入结果
BigDecimal result=new BigDecimal(0);
if(action==ComputeAction.ADD) {
//加
result=hisNumber.add(newNumber);
} else if(action==ComputeAction.SUBTRACTION) {
//减
result=hisNumber.subtract(newNumber);
} else if(action==ComputeAction.MULTIPLICATION) {
//乘
result=hisNumber.multiply(newNumber);
} else if(action==ComputeAction.DIVIDE) {
//除
result=hisNumber.divide(newNumber);
} else if(action==ComputeAction.AC) {
//ac
} else if(action==ComputeAction.THE){
//正反
} else {
result=hisNumber;
}
result=result.setScale(5,BigDecimal.ROUND_HALF_UP);
return result.doubleValue();
}

五、设置一个简单的交互效果,通过改变颜色实现,注意,这里的颜色需要先定义到values/colors.xml里才行

colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="black2">#444</color>
<color name="orange">#ff9955</color>
<color name="orange2">#ff8800</color>
</resources>

可以通过函数getColor获取到定义在xml里的颜色色值

private void activeBtn(int action){
int defColor=getColor(R.color.orange);
btnDivide.setBackgroundColor(defColor);
btnMultiplication.setBackgroundColor(defColor);
btnSubtraction.setBackgroundColor(defColor);
btnAdd.setBackgroundColor(defColor);
if(action==ComputeAction.ADD) {
//加
btnAdd.setBackgroundColor(getColor(R.color.orange2));
} else if(action==ComputeAction.SUBTRACTION) {
//减
btnSubtraction.setBackgroundColor(getColor(R.color.orange2));
} else if(action==ComputeAction.MULTIPLICATION) {
//乘
btnMultiplication.setBackgroundColor(getColor(R.color.orange2));
} else if(action==ComputeAction.DIVIDE) {
//除
btnDivide.setBackgroundColor(getColor(R.color.orange2));
}
}

这样,一个简易的计算器App就实现了

完整的代码

package com.liujto.androiddemo;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import java.io.Console;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
/**
* 累计计算的值
*/
private Double computeResult=null;
/**
* 计算动作
*/
private int action=ComputeAction.NONE;
/**
* 是否需要清空输入
*/
private boolean clearInput=true;
/**
* 当前界面展示的值
*/
private TextView tvResult;
private TextView btnAc;
private TextView btnThe;
private TextView btnPercent;
private TextView btnDivide;
private TextView btnMultiplication;
private TextView btnSubtraction;
private TextView btnAdd;
private TextView btnDot;
private TextView btnEqual;
private List<TextView> listNumber=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
//获取控件
private void initView(){
tvResult=findViewById(R.id.tv_result);//结果显示组件
btnAc=findViewById(R.id.btn_ac);//清空按钮
btnThe=findViewById(R.id.btn_the);//取反按钮
btnPercent=findViewById(R.id.btn_percent);//百分比按钮
btnDivide=findViewById(R.id.btn_divide);//除
btnMultiplication=findViewById(R.id.btn_multiplication);//乘
btnSubtraction=findViewById(R.id.btn_subtraction);//减
btnAdd=findViewById(R.id.btn_add);//加
btnEqual=findViewById(R.id.btn_equal);//等
btnDot=findViewById(R.id.btn_dot);//小数点
//数字按钮,放到List里
listNumber.add(findViewById(R.id.btn_0));
listNumber.add(findViewById(R.id.btn_1));
listNumber.add(findViewById(R.id.btn_2));
listNumber.add(findViewById(R.id.btn_3));
listNumber.add(findViewById(R.id.btn_4));
listNumber.add(findViewById(R.id.btn_5));
listNumber.add(findViewById(R.id.btn_6));
listNumber.add(findViewById(R.id.btn_7));
listNumber.add(findViewById(R.id.btn_8));
listNumber.add(findViewById(R.id.btn_9));
}
//绑定事件
private void initListener(){
//循环绑定数字按钮
for(TextView btnNumber:listNumber) {
btnNumber.setOnClickListener((View view)->{
handleNumberClick(Integer.parseInt(btnNumber.getText().toString()));//数字输入
});
}
btnAdd.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.ADD);
});
btnSubtraction.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.SUBTRACTION);
});
btnMultiplication.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.MULTIPLICATION);
});
btnDivide.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.DIVIDE);
});
btnEqual.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.EQUAL);
});
btnAc.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.AC);
});
btnPercent.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.PERCENT);
});
btnThe.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.THE);
});
btnDot.setOnClickListener((View view)->{
handleComputeAction(ComputeAction.DOT);
});
}
/**
* 输入数字
*/
private void handleNumberClick(Integer number){
String strOldResult=tvResult.getText().toString();
if(!clearInput) {
//当前没有按下计算按钮,显示的数字累加即可
if(strOldResult.equals("0")) {
strOldResult="";
}
tvResult.setText(strOldResult+number.toString());
clearInput=false;
return;
}
tvResult.setText(number+"");
clearInput=false;
}
/**
* 输入运算符
*/
private void handleComputeAction(int action) {
activeBtn(action);//处理按钮点击激活效果
String strOldResult=tvResult.getText().toString();//当前屏幕输入的值
Double oldResult=Double.parseDouble(strOldResult);//当前屏幕输入的数值
if(this.action==ComputeAction.NONE) {
//不存在上一个动作 保存当前输入的值
this.computeResult=oldResult;
}
if(action==ComputeAction.ADD || action==ComputeAction.SUBTRACTION ||action==ComputeAction.MULTIPLICATION ||action==ComputeAction.DIVIDE) {
//加减乘除运算
if(this.action==ComputeAction.NONE) {
//不存在上一个动作 保存当前输入的值
this.computeResult=oldResult;
} else {
//存在上一个动作,使用上一个动作计算一次
this.computeResult=handleCompute(this.computeResult,oldResult,this.action);
tvResult.setText(decimalFormat.format(computeResult));
}
this.action=action;
clearInput=true;
} else if(action==ComputeAction.EQUAL) {
//等
this.computeResult=handleCompute(this.computeResult,oldResult,this.action);
tvResult.setText(decimalFormat.format(computeResult));
this.action=ComputeAction.NONE;
clearInput=true;
} else if(action==ComputeAction.PERCENT) {
//百分比
this.computeResult=handlePercent(this.computeResult);
tvResult.setText(decimalFormat.format(computeResult));
this.action=ComputeAction.NONE;
} else if(action==ComputeAction.THE) {
//取反
this.computeResult=-this.computeResult;
tvResult.setText(decimalFormat.format(computeResult));
} else if(action==ComputeAction.DOT){
//小数点
if(!strOldResult.contains(".")) {
//加入小数点
tvResult.setText(strOldResult+".");
} else {
//不处理
}
} else if(action==ComputeAction.AC) {
//清空历史
this.computeResult=0.0;
tvResult.setText(decimalFormat.format(computeResult));
this.action=ComputeAction.NONE;
clearInput=true;
}
}
/**
* 计算操作
*/
private Double handleCompute(Double oldNumber,Double number,int action){
if(oldNumber==null) {
oldNumber=0.0;
}
if(number==null) {
number=0.0;
}
BigDecimal hisNumber=new BigDecimal(oldNumber);//历史结果
BigDecimal newNumber=new BigDecimal(number);//输入结果
BigDecimal result=new BigDecimal(0);
if(action==ComputeAction.ADD) {
//加
result=hisNumber.add(newNumber);
} else if(action==ComputeAction.SUBTRACTION) {
//减
result=hisNumber.subtract(newNumber);
} else if(action==ComputeAction.MULTIPLICATION) {
//乘
result=hisNumber.multiply(newNumber);
} else if(action==ComputeAction.DIVIDE) {
//除
result=hisNumber.divide(newNumber);
} else if(action==ComputeAction.AC) {
//ac
} else if(action==ComputeAction.THE){
//正反
} else {
result=hisNumber;
}
result=result.setScale(5,BigDecimal.ROUND_HALF_UP);
return result.doubleValue();
}
/**
* 百分比计算
*/
private double handlePercent(Double number){
return (new BigDecimal(number)).divide(new BigDecimal(100)).setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue();
}
private void activeBtn(int action){
int defColor=getColor(R.color.orange);
btnDivide.setBackgroundColor(defColor);
btnMultiplication.setBackgroundColor(defColor);
btnSubtraction.setBackgroundColor(defColor);
btnAdd.setBackgroundColor(defColor);
if(action==ComputeAction.ADD) {
//加
btnAdd.setBackgroundColor(getColor(R.color.orange2));
} else if(action==ComputeAction.SUBTRACTION) {
//减
btnSubtraction.setBackgroundColor(getColor(R.color.orange2));
} else if(action==ComputeAction.MULTIPLICATION) {
//乘
btnMultiplication.setBackgroundColor(getColor(R.color.orange2));
} else if(action==ComputeAction.DIVIDE) {
//除
btnDivide.setBackgroundColor(getColor(R.color.orange2));
}
}
}
啊~~~~~~~~~
最后更新于 2023-10-10