android中实现一个简单的计算器,实现连续的加减乘除运算。
首先,让我们看下布局:
Android 简单的计算器实现_第1张图片

最上边是一个edittext 用来显示用户输入的运算数字和运算符,下面是一个TableLayout显示数字和运算符按钮。
话不多说,主要代码如下:

package com.easygoing.androidcalculator;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ListAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button bt_num0;    private Button bt_num1;    private Button bt_num2;    private Button bt_num3;    private Button bt_num4;    private Button bt_num5;    private Button bt_num6;    private Button bt_num7;    private Button bt_num8;    private Button bt_num9;    private Button bt_clear;    private Button bt_percent;    private Button bt_delete;    private Button bt_div;    private Button bt_mult;    private Button bt_minus;    private Button bt_plus;    private Button bt_equal;    private Button bt_dot;    private EditText et_calc;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initViewAndListener();    }    private void initViewAndListener() {        bt_num0 = findViewById(R.id.bt_num0);        bt_num0.setOnClickListener(this);        bt_num1 = findViewById(R.id.bt_num1);        bt_num1.setOnClickListener(this);        bt_num2 = findViewById(R.id.bt_num2);        bt_num2.setOnClickListener(this);        bt_num3 = findViewById(R.id.bt_num3);        bt_num3.setOnClickListener(this);        bt_num4 = findViewById(R.id.bt_num4);        bt_num4.setOnClickListener(this);        bt_num5 = findViewById(R.id.bt_num5);        bt_num5.setOnClickListener(this);        bt_num6 = findViewById(R.id.bt_num6);        bt_num6.setOnClickListener(this);        bt_num7 = findViewById(R.id.bt_num7);        bt_num7.setOnClickListener(this);        bt_num8 = findViewById(R.id.bt_num8);        bt_num8.setOnClickListener(this);        bt_num9 = findViewById(R.id.bt_num9);        bt_num9.setOnClickListener(this);        bt_clear = findViewById(R.id.bt_clear);        bt_clear.setOnClickListener(this);        bt_percent = findViewById(R.id.bt_percent);        bt_percent.setOnClickListener(this);        bt_delete = findViewById(R.id.bt_delete);        bt_delete.setOnClickListener(this);        bt_div = findViewById(R.id.bt_div);        bt_div.setOnClickListener(this);        bt_mult = findViewById(R.id.bt_mult);        bt_mult.setOnClickListener(this);        bt_minus = findViewById(R.id.bt_minus);        bt_minus.setOnClickListener(this);        bt_plus = findViewById(R.id.bt_plus);        bt_plus.setOnClickListener(this);        bt_equal = findViewById(R.id.bt_equal);        bt_equal.setOnClickListener(this);        et_calc = findViewById(R.id.et_calc);        bt_dot = findViewById(R.id.bt_dot);        bt_dot.setOnClickListener(this);    }    private boolean lastIsOperator;    private String lastOperators = "";    private List operatorNumbers = new ArrayList<>();    private List operators = new ArrayList<>();;    private double firstNumber = 0D;    private double sencondNumber = 0D;    @Override    public void onClick(View v) {        String currentText = et_calc.getText().toString();        String operatorNumber = "";        if (currentText.equals("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_percent:                lastIsOperator = true;                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)        {            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        {            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);    }}```**重点内容**至于button的selector样式比较简单,这里简单贴出来两个:、"se-preview-section-delimiter">

普通button样式

<?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="com.easygoing.androidcalculator.MainActivity">    <EditText        android:id="@+id/et_calc"        style="@style/et_calc_style"        />    <TableLayout        android:layout_width="match_parent"        android:layout_height="wrap_content">        <TableRow>            <Button                android:id="@+id/bt_clear"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="C"/>            <Button                android:id="@+id/bt_percent"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="+/-"/>            <Button                android:id="@+id/bt_delete"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="Del" />            <Button                android:id="@+id/bt_div"                style="@style/bt_styles_common"                android:background="@drawable/btn_operate_background"                android:textColor="#FFFFFF"                android:text="÷"/>        TableRow>        <TableRow>            <Button                android:id="@+id/bt_num7"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="7"/>            <Button                android:id="@+id/bt_num8"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="8"/>            <Button                android:id="@+id/bt_num9"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="9"/>            <Button                android:id="@+id/bt_mult"                style="@style/bt_styles_common"                android:background="@drawable/btn_operate_background"                android:textColor="#FFFFFF"                android:text="×"/>        TableRow>        <TableRow>            <Button                android:id="@+id/bt_num4"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="4"/>            <Button                android:id="@+id/bt_num5"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="5"/>            <Button                android:id="@+id/bt_num6"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="6"/>            <Button                android:id="@+id/bt_minus"                style="@style/bt_styles_common"                android:background="@drawable/btn_operate_background"                android:textColor="#FFFFFF"                android:text="-"/>        TableRow>        <TableRow>            <Button                android:id="@+id/bt_num1"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="1"/>            <Button                android:id="@+id/bt_num2"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="2"/>            <Button                android:id="@+id/bt_num3"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="3"/>            <Button                android:id="@+id/bt_plus"                style="@style/bt_styles_common"                android:background="@drawable/btn_operate_background"                android:textColor="#FFFFFF"                android:text="+"/>        TableRow>        <TableRow>            <Button                android:id="@+id/bt_num0"                style="@style/bt_styles_common"                android:background="@drawable/btn_background"                android:text="0"/>            <Button                android:id="@+id/bt_dot"                style="@style/bt_styles_common"                android:layout_weight="0.5"                android:background="@drawable/btn_background"                android:text="·"/>            <Button                android:id="@+id/bt_equal"                style="@style/bt_styles_common"                android:layout_weight="0.5"                android:background="@drawable/btn_operate_background"                android:textColor="#FFFFFF"                android:text="="/>        TableRow>    TableLayout>LinearLayout>

这里需要注意的一点就是再按钮0的布局那里,需要设置一样权重,让按钮0能够占两个按钮的长度,

代码的逻辑比较简单,主要是记录三个操作数和两个运算符,当有两个运算符的时候,比较运算符的优先级,先行运算,然后保存计算结果,详细的可以看下代码。

当然了,这个计算器的功能不是很完善,这里只不过是进行一个简单的示例,有兴趣的可以自己做一个。。

源代码下载地址:http://download.csdn.net/download/qingyulove/10181313

更多相关文章

  1. 一个二维码实现IOS和android两个平台的下载核心代码
  2. Android-使用SoundPool实现语音计算器
  3. android背景选择器selector用法、自定义Button按钮样式.........
  4. [Android] 一份代码,两个版本
  5. 利用android studio制作简易的计算器
  6. android延迟执行任务(刷新按钮旋转)
  7. Android控件-多选按钮、单选按钮
  8. android Shape Drawable创建两边半圆的按钮背景【转】

随机推荐

  1. 用python计算20日均线数值
  2. Python添加默认模块搜索包路径
  3. python的list要打印中文字符
  4. Python——函数 8、可变长参数
  5. 任何人都可以提供更多的pythonic方式来生
  6. Mac环境下配置python3
  7. 我需要一个django-芹菜守护进程来监听特
  8. 利用python破解sqlserver账号密码
  9. python2.X 画一个正方体
  10. jira python oauth:如何获取身份验证的参