前言:这个项目是还存在很多bug,基本上可以实现16位以下的加减乘除求余,源码在文末处

实现思路:

首先定义标识用来判断用户输入字符或非字符

再定义三个值,左值,右值,运算结果

左值只有在字符模式下才能赋值,右值只有在用户点击了运算符后进入非字符模式,才能进行赋值


当用户点击"="后,通过对左值右值进行相应运算得出最终结果,并进行文本的显示。

一:运行效果


二:前端布局代码

1:二个自定义.xml


①:btn_equles.xml

<?xml version="1.0" encoding="UTF-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!-- 填充的颜色 --><solid android:color="#FFF" /><cornersandroid:radius="5dip" /><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp"/><!-- 边框的宽度,每段虚线的长度,和两段虚线之间的间隔和颜色 --><strokeandroid:width="2dp"android:dashWidth="6dp"android:dashGap="6dp"android:color="#e75050" /><!-- 填充颜色 --><solid android:color="#F44336"/>
</shape>

②:button.xml

<?xml version="1.0" encoding="UTF-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!-- 填充的颜色 --><solid android:color="#FFF" /><cornersandroid:radius="5dip" /><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp"/><!-- 边框的宽度,每段虚线的长度,和两段虚线之间的间隔和颜色 --><strokeandroid:width="2dp"android:dashWidth="6dp"android:dashGap="6dp"android:color="#e75050" />
</shape>

2:颜色,字体,样式


①:colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorPrimary">#008577</color><color name="colorPrimaryDark">#00574B</color><color name="colorAccent">#D81B60</color><color name="black">#000</color><color name="white">#fff</color>
</resources>

②:string.xml

<resources><string name="app_name">Computer</string><string name="c">C</string><string name="division">÷</string><string name="multiplication">x</string><string name="back">←</string><string name="num_7">7</string><string name="num_8">8</string><string name="num_9">9</string><string name="subtraction">-</string><string name="num_4">4</string><string name="num_5">5</string><string name="Add">+</string><string name="num_6">6</string><string name="num_1">1</string><string name="num_2">2</string><string name="num_3">3</string><string name="little">.</string><string name="num_0">0</string><string name="seekSurplus">%</string><string name="equals">=</string>
</resources>

③:styles.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item>
</style>
<style name="ButtonStyle" ><item name="android:textColor">@color/black</item><item name="android:background">@drawable/button</item><item name="android:radius">10dp</item><item name="android:textStyle">bold</item><item name="android:textSize">25sp</item><item name="android:borderlessButtonStyle">@style/TextAppearance.AppCompat.Body1</item>
</style>
<style name="arithmeticStyle"><item name="android:textColor">#F44336</item><item name="android:background">@drawable/button</item><item name="android:radius">10dp</item><item name="android:textStyle">bold</item><item name="android:textSize">25sp</item><item name="android:borderlessButtonStyle">@style/TextAppearance.AppCompat.Body1</item>
</style>
</resources>

2:activity.xml布局代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#404040"><Buttonandroid:id="@+id/btn_c"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/c"app:layout_constraintBottom_toTopOf="@+id/btn_num7"app:layout_constraintEnd_toStartOf="@+id/btn_div"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/content1" /><Buttonandroid:id="@+id/btn_div"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/division"app:layout_constraintBottom_toTopOf="@+id/btn_num8"app:layout_constraintEnd_toStartOf="@+id/btn_Mul"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_c"app:layout_constraintTop_toBottomOf="@+id/content1" /><Buttonandroid:id="@+id/btn_Mul"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/multiplication"app:layout_constraintBottom_toTopOf="@+id/btn_num9"app:layout_constraintEnd_toStartOf="@+id/btn_back"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_div"app:layout_constraintTop_toBottomOf="@+id/content1" /><Buttonandroid:id="@+id/btn_back"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/back"app:layout_constraintBottom_toTopOf="@+id/btn_sub"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_Mul"app:layout_constraintTop_toBottomOf="@+id/content1" /><Buttonandroid:id="@+id/btn_num7"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_7"app:layout_constraintBottom_toTopOf="@+id/btn_num4"app:layout_constraintEnd_toStartOf="@+id/btn_num8"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btn_c" /><Buttonandroid:id="@+id/btn_num8"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_8"app:layout_constraintBottom_toTopOf="@+id/btn_num6"app:layout_constraintEnd_toStartOf="@+id/btn_num9"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num7"app:layout_constraintTop_toBottomOf="@+id/btn_div" /><Buttonandroid:id="@+id/btn_num9"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_9"app:layout_constraintBottom_toTopOf="@+id/btn_num5"app:layout_constraintEnd_toStartOf="@+id/btn_sub"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num8"app:layout_constraintTop_toBottomOf="@+id/btn_Mul" /><Buttonandroid:id="@+id/btn_sub"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/subtraction"app:layout_constraintBottom_toTopOf="@+id/btn_add"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num9"app:layout_constraintTop_toBottomOf="@+id/btn_back" /><Buttonandroid:id="@+id/btn_num4"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_4"app:layout_constraintBottom_toTopOf="@+id/btn_num1"app:layout_constraintEnd_toStartOf="@+id/btn_num6"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btn_num7" /><Buttonandroid:id="@+id/btn_num5"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_6"app:layout_constraintBottom_toTopOf="@+id/btn_num3"app:layout_constraintEnd_toStartOf="@+id/btn_add"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num6"app:layout_constraintTop_toBottomOf="@+id/btn_num9" /><Buttonandroid:id="@+id/btn_num6"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_5"app:layout_constraintBottom_toTopOf="@+id/btn_num2"app:layout_constraintEnd_toStartOf="@+id/btn_num5"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num4"app:layout_constraintTop_toBottomOf="@+id/btn_num8" /><Buttonandroid:id="@+id/btn_add"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/Add"app:layout_constraintBottom_toTopOf="@+id/btn_equles"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num5"app:layout_constraintTop_toBottomOf="@+id/btn_sub" /><Buttonandroid:id="@+id/btn_num1"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_1"app:layout_constraintBottom_toTopOf="@+id/btn_little"app:layout_constraintEnd_toStartOf="@+id/btn_num2"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btn_num4" /><Buttonandroid:id="@+id/btn_num2"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_2"app:layout_constraintBottom_toTopOf="@+id/btn_num0"app:layout_constraintEnd_toStartOf="@+id/btn_num3"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num1"app:layout_constraintTop_toBottomOf="@+id/btn_num6" /><Buttonandroid:id="@+id/btn_num3"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_3"app:layout_constraintBottom_toTopOf="@+id/btn_Seek"app:layout_constraintEnd_toStartOf="@+id/btn_equles"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num2"app:layout_constraintTop_toBottomOf="@+id/btn_num5" /><Buttonandroid:background="@drawable/btn_equles"android:id="@+id/btn_equles"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="198dp"android:text="@string/equals"android:textColor="#FFF"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_Seek"app:layout_constraintTop_toBottomOf="@+id/btn_add" /><Buttonandroid:id="@+id/btn_little"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/little"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/btn_num0"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btn_num1" /><Buttonandroid:id="@+id/btn_num0"style="@style/ButtonStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/num_0"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/btn_Seek"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_little"app:layout_constraintTop_toBottomOf="@+id/btn_num2" /><Buttonandroid:id="@+id/btn_Seek"style="@style/arithmeticStyle"android:layout_width="90dp"android:layout_height="90dp"android:text="@string/seekSurplus"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/btn_equles"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/btn_num0"app:layout_constraintTop_toBottomOf="@+id/btn_num3" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline9"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.31874144" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline10"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.45690835" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline11"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.59370726" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline12"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="532dp" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline13"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="625dp" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline14"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="723dp" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.16" /><TextViewandroid:id="@+id/content2"android:layout_width="397dp"android:layout_height="117dp"android:layout_marginStart="8dp"android:layout_marginLeft="20dp"android:layout_marginTop="8dp"android:layout_marginEnd="8dp"android:layout_marginRight="8dp"android:layout_marginBottom="8dp"android:gravity="bottom|end"android:textSize="100sp"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/content1"android:layout_width="397dp"android:layout_height="109dp"android:layout_marginStart="8dp"android:layout_marginLeft="20dp"android:layout_marginTop="8dp"android:layout_marginEnd="8dp"android:layout_marginRight="8dp"android:layout_marginBottom="8dp"android:gravity="bottom|end"android:hint="@string/num_0"android:textSize="100sp"app:layout_constraintBottom_toTopOf="@+id/guideline9"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/content2" /></androidx.constraintlayout.widget.ConstraintLayout>

三:后端布局代码

package cn.cg.computer;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import java.math.BigDecimal;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_0,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9;private  Button btn_add,btn_c,btn_back,btn_division,btn_equle,btn_mul,btn_seek,btn_sub,btn_little;private TextView content1,content2;//输入为字符public static final int INPUT_NUMBER = 1;//输入为非字符public  static  final  int INPUT_NONNUMBER=2;private int lastTimeInput = INPUT_NUMBER; //记录上一次输入状态//左值,右值,运算结果private     String result_Left=" ",result_Right=" ",result=" ";//定义运算表示(+,-,*,/,%)private  String Tage="0";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);InitView();}//初始绑定控件@SuppressLint("WrongViewCast")private  void InitView(){//找到前端对应控件的位置btn_0= findViewById(R.id.btn_num0);btn_1=findViewById(R.id.btn_num1);btn_2=findViewById(R.id.btn_num2);btn_3=findViewById(R.id.btn_num3);btn_4=findViewById(R.id.btn_num4);btn_5=findViewById(R.id.btn_num5);btn_6=findViewById(R.id.btn_num6);btn_7=findViewById(R.id.btn_num7);btn_8=findViewById(R.id.btn_num8);btn_9=findViewById(R.id.btn_num9);//加法btn_add=findViewById(R.id.btn_add);//清零btn_c=findViewById(R.id.btn_c);//回退一格btn_back=findViewById(R.id.btn_back);//除法btn_division=findViewById(R.id.btn_div);//等号btn_equle=findViewById(R.id.btn_equles);//乘法btn_mul=findViewById(R.id.btn_Mul);//求余btn_seek=findViewById(R.id.btn_Seek);//减法btn_sub=findViewById(R.id.btn_sub);//小数点btn_little=findViewById(R.id.btn_little);//显示运行结果内容content1=findViewById(R.id.content1);content2=findViewById(R.id.content2);//设置监听事件setOnClickListener();}//设置监听器private void setOnClickListener() {btn_0.setOnClickListener(this);btn_1.setOnClickListener(this);btn_2.setOnClickListener(this);btn_3.setOnClickListener(this);btn_4.setOnClickListener(this);btn_5.setOnClickListener(this);btn_6.setOnClickListener(this);btn_7.setOnClickListener(this);btn_8.setOnClickListener(this);btn_9.setOnClickListener(this);btn_add.setOnClickListener(this);btn_back.setOnClickListener(this);btn_division.setOnClickListener(this);btn_equle.setOnClickListener(this);btn_mul.setOnClickListener(this);btn_seek.setOnClickListener(this);btn_sub.setOnClickListener(this);btn_c.setOnClickListener(this);btn_little.setOnClickListener(this);}//重写onClick方法@Overridepublic void onClick(View v) {//判断运算框长度是否等于7,如果等于就设置字体大小if (content2.getText().toString().trim().length()>=4) {content2.setTextSize(40);}else {content2.setTextSize(80);}//通过按钮id实现多控件的监听switch(v.getId()){case R.id.btn_add:arithmetic("+");break;case R.id.btn_c:clearText();break;case R.id.btn_back:back();break;case R.id.btn_div:arithmetic("/");break;case R.id.btn_equles:equle();break;case R.id.btn_Mul:arithmetic("*");break;case R.id.btn_Seek:arithmetic("%");break;case  R.id.btn_sub:arithmetic("-");break;case R.id.btn_little:getlittle(v);break;default:inputNumber(v);break;}}//回退键private void back() {//判断运算窗口是否有内容if (!content2.getText().toString().trim().isEmpty()){//判断Tage如果为0表示只有左值if (!Tage.contains("0")){if (content2.getText().toString().trim().length()==content2.getText().toString().trim().lastIndexOf(Tage)+1){result_Left=content2.getText().toString().trim().substring(0,content2.getText().toString().trim().lastIndexOf(Tage));content2.setText(result_Left );//resultLeft T:形式lastTimeInput=INPUT_NUMBER;Tage="0";}else  if (content2.getText().toString().trim().length()>content2.getText().toString().trim().lastIndexOf(Tage)+1){//resultLeft T resultRight:形式result_Right=content2.getText().toString().trim().substring(content2.getText().toString().trim().lastIndexOf(Tage),content2.getText().toString().trim().length()-1);content2.setText(content2.getText().toString().trim().substring(0,content2.getText().toString().trim().length()-1));}}else {//result_Leftif (content2.getText().toString().trim().length() == 1) {content2.setText("0");result_Left = "0";}else {result_Left=content2.getText().toString().trim().substring(0,content2.getText().toString().trim().length()-1);content2.setText(result_Left);}}}}//用户点击运算符号private void arithmetic(String t) {//设置标记Tage=t;if (!content1.getText().toString().trim().isEmpty()){lastTimeInput=INPUT_NONNUMBER;if (content2.getText().toString().trim().isEmpty()){result_Left=result;content2.setText(result_Left+t);}else{//表示LeftValue+"."形式去掉"."if (content2.getText().toString().trim().lastIndexOf(".")+1==content2.getText().toString().trim().length()){result_Left=content2.getText().toString().trim().substring(0,content2.getText().toString().trim().length()-1);content2.setText(result_Left);}//判断运算框中是否有负号if (content2.getText().toString().trim().contains("-")){//在首位表示负数可以if (content2.getText().toString().trim().lastIndexOf("-")==0){content2.setText(result_Left+t);}}if (!content2.getText().toString().trim().contains(Tage)){content2.setText(result_Left+t);}}}else {lastTimeInput=INPUT_NUMBER;}}//用户点击等于,进行运算private void equle() {try {content2.setTextSize(40);content1.setTextSize(80);double finaloutcome=0.0;int seek=0;if (content2.getText().toString().trim().contains("+")){finaloutcome=add(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));}else if (content2.getText().toString().trim().contains("-")){finaloutcome=sub(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));}else if (content2.getText().toString().trim().contains("*")){finaloutcome=mul(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));}else if (content2.getText().toString().trim().contains("/")){finaloutcome=div(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));} else if (content2.getText().toString().trim().contains("%")) {finaloutcome=Double.valueOf(result_Left.trim())%Double.valueOf(result_Right.trim());seek=(int) finaloutcome;}else{Toast.makeText(MainActivity.this,"出现异常",Toast.LENGTH_LONG);return;}if (content2.getText().toString().trim().contains("%")){result=Integer.toString(seek);content1.setText(result);}else{if (!result_Left.contains(".")&&!result_Right.contains(".")&&!content2.getText().toString().trim().contains("/")){result=Integer.toString((int)finaloutcome);content1.setText(result);}else{result=Double.toString(finaloutcome);content1.setText(result);}}lastTimeInput=INPUT_NUMBER;result_Left=" ";result_Right=" ";content2.setText("");}catch (Exception ex){Toast.makeText(MainActivity.this,ex.toString(),Toast.LENGTH_LONG).show();}}//小数点private void getlittle(View v) {String little_str=((Button)v).getText().toString().trim();if (lastTimeInput==INPUT_NUMBER){if (content1.getText().toString().trim().isEmpty()){result_Left="0.";}else if (!result_Left.contains(".")){result_Left+=little_str;}result=result_Left;content1.setText("="+result);content2.setText(result_Left);}}//按C键,清空所有消息private void clearText() {Tage="0";result_Left="";result_Right="";lastTimeInput=INPUT_NUMBER;content2.setText(" ");content1.setTextSize(80);content1.setText("");}//数字的输入private void inputNumber(View v) {//用户点击设置结果框字体为40spcontent1.setTextSize(40);//获取按钮上的文本String  key=((Button)v).getText().toString();//数字模式输入if (lastTimeInput==INPUT_NUMBER){if (result_Left.trim().isEmpty()){result_Left=key;}else{//首位是否为0if (result_Left.startsWith("0")&&result_Left.trim().length()==1){result_Left=key;}else {result_Left+=key;}}result=result_Left;content1.setText("="+result);content2.setText(result_Left);}else{//右边赋值if (result_Right.trim().isEmpty()){result_Right=key;}else{//首位是否为0if (result_Right.startsWith("0")&&result_Right.trim().length()==1){result_Right=key;}else {result_Right+=key;}}content2.setText(content2.getText().toString().trim().substring(0,result_Left.length()+1)+result_Right);}}/*用户退出软件,弹出提示框*/@Overridepublic void onBackPressed() {//设置提示框显示AlertDialog.Builder  builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("提示").setIcon(R.drawable.warn).setMessage("你确定要退出?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//退出程序MainActivity.this.finish();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//取消提示框dialog.dismiss();}});AlertDialog dialog= builder.create();dialog.show();}/*计算:加减乘除*/public static Double div(Double v1, Double v2) {BigDecimal b1 = new BigDecimal(v1.toString());BigDecimal b2 = new BigDecimal(v2.toString());return b1.divide(b2, 10, 4).doubleValue();}public static Double sub(Double v1, Double v2) {BigDecimal b1 = new BigDecimal(v1.toString());BigDecimal b2 = new BigDecimal(v2.toString());return b1.subtract(b2).doubleValue();}public static Double add(Double v1, Double v2) {BigDecimal b1 = new BigDecimal(v1.toString());BigDecimal b2 = new BigDecimal(v2.toString());return b1.add(b2).doubleValue();}public static Double mul(Double v1, Double v2) {BigDecimal b1 = new BigDecimal(v1.toString());BigDecimal b2 = new BigDecimal(v2.toString());return b1.multiply(b2).doubleValue();}
}

四:bug详情

(先记录等有空再做修改)
1:进行运算后点击"."出现bug(小数点要进行相应的验证)


2:超过16位后出现运算结果不对的bug

五.源码下载

整个项目的完整代码链接:点击下载吧

Android计算器(仿小米计算器)相关推荐

  1. Java仿小米计算器源码_xiaomi-Calculator 仿照小米的计算器功能,作为一个Android的初学者可以参考,界面简单大方。 259万源代码下载- www.pudn.com...

    文件名称: xiaomi-Calculator下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 795 KB 上传时间: 2016-06-13 下载次数: 0 提 ...

  2. 高仿小米计算器界面UI 适合新手学习 [附源码]

    初学Android尝试着做一些布局,看到手机上的小米计算器界面简洁,适合新手尝试,于是做了一下,但是未实现逻辑,只是高仿界面. 小米计算器UI 高仿小米计算器UI 源码:https://downloa ...

  3. android高仿小米时钟,Android小米时钟 Android仿小米时钟效果

    想了解Android仿小米时钟效果的相关内容吗,jane_dxj在本文为您仔细讲解Android小米时钟的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android,时钟,下面大家一起来 ...

  4. android动画篇——仿小米计算器切换动画效果

    实现思路 此效果实现用到了:LayoutTransition和ObjectAnimator的相关知识 思路:当点击切换按钮时顶部ViewGroup和左侧ViewGroup可见性设置为Gone,并自动开 ...

  5. Java仿小米计算器源码_仿小米计算器

    [实例简介] 一款仿小米简约的计算器.支持大部分操作,超过10位没有处理,需要的朋友可以改善一下. [实例截图] [核心代码] Calculator └── Calculator ├── Androi ...

  6. Android 小米计算器,小米计算器app_小米计算器安卓版_小米计算器正式_易玩网

    小米计算器是一款手机计算工具,小米计算器可以帮助你在手机上使用科学计算器,功能非常的强大,竟然还没有人上传过,网精心为你推荐的优良软件,喜欢的朋友快来吧~ 小米计算器软件介绍 小米计算器,集普通计算. ...

  7. android app 仿小米全面屏手势返回UI样式

    1.概述 在app开发中,最近有功能要求仿小米全面屏左右手势返回样式做手势返回的UI样式定制,所以就需要了解相关功能然后开发,在android系统api可以中用贝塞尔曲线实现相关的功能 效果图: 2. ...

  8. android高仿小米日历,高仿钉钉和小米的日历控件

    i# 简介 这是一个高仿钉钉和小米的日历控件,支持快速滑动,界面缓存.想要定制化UI,使用起来非常简单,就像使用ListView一样 一些特点: 可以自定义日历控件UI 支持快速滑动 支持农历和阳历 ...

  9. 卡西欧计算器VS小米计算器

    本期看点: 计算器应用在生活中发挥巨大用途 出门在外,不能随身携带 后来手机普遍应用,使得计算器嵌入手机中 随后计算器功能也是越来越多 除了四则运算 包含年龄,面积转换,长度转换,速度转换- 上学时代 ...

  10. android 高仿小米note2,小米Note再现高仿版真假难辨 山寨小米Note长什么样?

    过去,山寨品牌手机的案例并不少见,但山寨国产手机却十分少有,然而随着国产手机的火热和互联网品牌的兴起,在多数厂商都钟情于抢购模式的情况下,山寨厂商开始将目光对准这些"火热"的国产手 ...

最新文章

  1. 安装Eclipse ADT插件时遇到的问题
  2. 第一范式、第二范式、第三范式
  3. jar包名冲突gradle_jar包又冲突了?如何快速确定与哪个jar包冲突?
  4. mysql事务变量_mysql学习四之事务、变量、触发器、函数、存储过程
  5. 一种通用递归深度检测技术 - 基于栈帧内容的检测 - Golang语言描述
  6. SQLSERVER2005的安装目录结构(下)
  7. [Android Pro] 终极组件化框架项目方案详解
  8. hdu 2295 Radar DLX 重复覆盖问题
  9. 给Fedora11安装五笔
  10. hashmap和hashtable,arraylist和vector的区别
  11. java利用Google Zxing实现 二维码生成与解析
  12. Oracle查询显示CLOB的内容
  13. 一层循环时间复杂度_数据结构与算法:算法的时间复杂度
  14. 结构体全局变量_nginx源码分析—内存池结构ngx_pool_t及内存管理
  15. 容器技术Docker K8s 13 容器服务Kubernetes版ACK详解-使用镜像快速创建有状态应用
  16. 若已知1800年1月1日为星期3,则对于一个给定的年份和月份,输出这个月的最后一天是星期几。
  17. 解决IDEA提交代码时提示“Performing Code Analysis...”
  18. 使用moment.js获取一个自然周开始日期和结束日期
  19. linux如何合并文件
  20. 全球与中国板上芯片LED行业发展规模及投资前景预测报告2022-2028年

热门文章

  1. 弹性计算 Region 化部署和跨可用区容灾介绍
  2. 中国大数据与智能计算产业联盟“开源软件工作委员会”成立会议在京召开
  3. 车站计算机系统需要具备几天数据储存能力,(复习资料)城市轨道交通车站设备1.doc...
  4. 【优化算法】人工电场优化算法(AEFA)【含Matlab源码 1797期】
  5. 【单目标优化求解】基于matlab秃鹰算法(BES)求解最优目标问题【含Matlab源码 1546期】
  6. 【优化求解】基于matlab GUI模拟退火算法求解全局最大值最小值问题【含Matlab源码 1242期】
  7. 【TSP】基于matlab GUI蚁群算法求解旅行商问题【含Matlab源码 1032期】
  8. «构建并破坏它»:某些算法如何生成验证码,而另一些则如何破解
  9. 关于np.meshgrid
  10. anaconda安装torch_零基础入门PyTorch:怎样用?有哪些优势?手把手带你安装配置...