安卓简易计算器

378 阅读4分钟

安卓

Android是由Andy Rubin创立的一个手机操作系统,后来被Google收购。Gooole希望与各方面共同建立一个标准化的、开放式的移动电话软件平台,从而在移动产业形成一个开放式的操作平台。

界面编程

安卓常用的几种布局:线性布局(LineraLayout)、表格布局(Tablelayout)、帧布局(FrameLayout)、相对布局(RelativeLayout)等等。我这里用的是比较简单的“线性布局”。

布局文件(activity_main.xml):

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context="com.example.zhaoxudong.calculatorapp.MainActivity">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="0dp">

        <EditText
            android:layout_width="403dp"
            android:layout_height="155dp"
            android:id="@+id/result_Text"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="CE"
                android:id="@+id/CE"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="DEL"
                android:id="@+id/DEL"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="SIN"
                android:id="@+id/SIN"/>
            <Button
                android:layout_width="113dp"
                android:layout_height="wrap_content"
                android:text="COS"
                android:id="@+id/COS"/>



        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="7"
                android:id="@+id/number7"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="8"
                android:id="@+id/number8"/>/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="9"
                android:id="@+id/number9"/>/>
            <Button
                android:layout_width="117dp"
                android:layout_height="wrap_content"
                android:text="+"
                android:id="@+id/add_but"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="4"
                android:id="@+id/number4"/>/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="5"
                android:id="@+id/number5"/>/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="6"
                android:id="@+id/number6"/>/>
            <Button
                android:layout_width="117dp"
                android:layout_height="wrap_content"
                android:text="-"
                android:id="@+id/sub_but"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1"
                android:id="@+id/number1"/>/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2"
                android:id="@+id/number2"/>/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="3"
                android:id="@+id/number3"/>/>
            <Button
                android:layout_width="116dp"
                android:layout_height="wrap_content"
                android:text="*"
                android:id="@+id/mult_but"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="="
                android:id="@+id/sign_but"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0"
                android:id="@+id/number0"/>/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="."
                android:id="@+id/spot_but"/>
            <Button
                android:layout_width="114dp"
                android:layout_height="wrap_content"
                android:text="/"
                android:id="@+id/div_but"/>
        </LinearLayout>

    </LinearLayout>


</android.support.constraint.ConstraintLayout>

逻辑部分

逻辑部分是由java代码实现,实践证明代码多练还是有好处的。

为了实现按钮的点击事件:

public class MainActivity extends Activity implements OnClikListener{}

对layout中的按钮进行定义:

    private Button number0;
    private Button number1;
    private Button number2;
    private Button number3;
    private Button number4;
    private Button number5;
    private Button number6;
    private Button number7;
    private Button number8;
    private Button number9;

    /*
    运算符
     */
    private Button add_but;//加法
    private Button sub_but;//减法
    private Button mult_but;//乘法
    private Button div_but;//除法

    /*
    等号
    小数点
    归零
     */
    private Button sign_but;//等号
    private Button spot_but;//小数点
    private Button CE_but;//归零键
    private Button DEL;
    private Button SIN;
    private Button COS;
    /*
    结果
     */
    private EditText result;
    private boolean clear_flag;//清空标识

对每个按钮进行实例化并且设置点击事件

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
        数字
         */
        number0 = (Button) findViewById(R.id.number0);
        number1 = (Button) findViewById(R.id.number1);
        number2 = (Button) findViewById(R.id.number2);
        number3 = (Button) findViewById(R.id.number3);
        number4 = (Button) findViewById(R.id.number4);
        number5 = (Button) findViewById(R.id.number5);
        number6 = (Button) findViewById(R.id.number6);
        number7 = (Button) findViewById(R.id.number7);
        number8 = (Button) findViewById(R.id.number8);
        number9 = (Button) findViewById(R.id.number9);
        /*
        运算符
         */
        add_but = (Button) findViewById(R.id.add_but);
        sub_but = (Button) findViewById(R.id.sub_but);
        mult_but = (Button) findViewById(R.id.mult_but);
        div_but = (Button) findViewById(R.id.div_but);
        /*
        等号
        小数点
        归零
         */
        sign_but = (Button) findViewById(R.id.sign_but);//等号
        spot_but = (Button) findViewById(R.id.spot_but);//小数点
        CE_but = (Button) findViewById(R.id.CE);//归零
        DEL = (Button) findViewById(R.id.DEL);
        SIN=(Button) findViewById(R.id.SIN);
        COS=(Button) findViewById(R.id.COS);
        /*
        结果
         */
        result = (EditText) findViewById(R.id.result_Text);


    /*
    初始化事件
     */

        number0.setOnClickListener(this);
        number1.setOnClickListener(this);
        number2.setOnClickListener(this);
        number3.setOnClickListener(this);
        number4.setOnClickListener(this);
        number5.setOnClickListener(this);
        number6.setOnClickListener(this);
        number7.setOnClickListener(this);
        number8.setOnClickListener(this);
        number9.setOnClickListener(this);

        add_but.setOnClickListener(this);
        sub_but.setOnClickListener(this);
        mult_but.setOnClickListener(this);
        div_but.setOnClickListener(this);

        sign_but.setOnClickListener(this);
        spot_but.setOnClickListener(this);
        CE_but.setOnClickListener(this);
        DEL.setOnClickListener(this);
        SIN.setOnClickListener(this);
        COS.setOnClickListener(this);
    }

下面是在onClick方法中实现逻辑运算:

这里使用的方法是使用以下代码获取EditText中的字符串

 String str = result.getText().toString();

为了区分开数字和运算符,分别用s1、s2和op来表示数字和运算符

String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//截取到的运算符
String s2 = exp.substring(exp.indexOf(" ") + 3);//运算符后面的字符串

为了能够实现点击任意按钮可以出现对应的字符,使用以下代码可以获取Button中的内容

result.setText(str + " " + ((Button) v).getText() + " ");

通过判断出数字和运算符来进行运算,下面是逻辑运算全部的代码:

private void getResult() {
        clear_flag = true;
        String exp = result.getText().toString();
        double result_1 = 0;
        if(exp==null||exp.equals("")){
            return;
        }
        if(!exp.contains(" ")){
            return;
        }
        if (clear_flag){
            clear_flag=false;
        }
        clear_flag=true;
        String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
        String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//截取到的运算符
        String s2 = exp.substring(exp.indexOf(" ") + 3);//运算符后面的字符串
        if (!s1.equals("") && !s2.equals("")) {
            double d1 = Double.parseDouble(s1);
            double d2 = Double.parseDouble(s2);
            if (op.equals("+")) {
                result_1 = d1 + d2;
            } else if (op.equals("-")) {
                result_1 = d1 - d2;

            } else if (op.equals("*")) {
                result_1 = d1 * d2;

            } else if (op.equals("/")) {
                if (d2 == 0)
                    result_1 = 0;
                result_1 = d1 / d2;

            }
            if (!s1.contains(".") && !s2.contains(".")&&!op.equals("/")) {
                int r = (int) result_1;
                result.setText(r + "");

            } else {
                result.setText(result_1 + "");
            }

        } else if (!s1.equals("") && s2.equals("")) {
            result.setText(exp);
        } else if (s1.equals("") && !s2.equals("")) {
            double d2 = Double.parseDouble(s2);
            if (op.equals("+")) {
                result_1 = 0 + d2;
            } else if (op.equals("-")) {
                result_1 = 0 - d2;

            } else if (op.equals("*")) {
                result_1 = 0;

            } else if (op.equals("/")) {
                result_1 = 0;

            }
        } else {
            result.setText("");
        }
    }

以上便是简单计算器的所有重要代码。

实现功能

  • 支持加减乘除的基本运算
  • 支持加减乘除后的再运算
  • 支持浮点数运算
  • 支持三角函数sin cos运算
  • 支持数字删除
  • 支持置零