安卓简易计算器

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rowCount="6"
    android:columnCount="4" >

    <TextView
        android:id="@+id/Result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_marginLeft="4px"
        android:gravity="left"
        android:text="0"
        android:textSize="50dip"/>
    <Button
        android:id="@+id/clear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
        android:textSize="26sp" />
    <Button android:id="@+id/num1" android:text="1" android:textSize="26sp" />
    <Button android:id="@+id/num2" android:text="2" android:textSize="26sp" />
    <Button android:id="@+id/num3" android:text="3" android:textSize="26sp" />
    <Button android:id="@+id/plus" android:text="+" android:textSize="26sp" />
    <Button android:id="@+id/num4" android:text="4" android:textSize="26sp" />
    <Button android:id="@+id/num5" android:text="5" android:textSize="26sp" />
    <Button android:id="@+id/num6" android:text="6" android:textSize="26sp" />
    <Button android:id="@+id/subtract" android:text="-" android:textSize="26sp" />
    <Button android:id="@+id/num7" android:text="7" android:textSize="26sp" />
    <Button android:id="@+id/num8" android:text="8" android:textSize="26sp" />
    <Button android:id="@+id/num9" android:text="9" android:textSize="26sp" />
    <Button android:id="@+id/multiply" android:text="*" android:textSize="26sp" />
    <Button android:id="@+id/point" android:text="." android:textSize="26sp" />
    <Button android:id="@+id/num0" android:text="0" android:textSize="26sp" />
    <Button android:id="@+id/equal" android:text="=" android:textSize="26sp" />
    <Button android:id="@+id/divide" android:text="/" android:textSize="26sp" />
</GridLayout>

MainActivity.java

package com.example.tlj;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {


    private Button[] btnNum = new Button[11];// 数值按钮,用数组存储
    private Button[] btnOperator = new Button[5];// 符号按钮,用数组存储
    private TextView textView = null;// 显示区域
    private Button btnClear = null; // clear按钮

    private static String operator; // 用于保存运算符
    private boolean clearFlag; // 用于判断是否清空显示区域的值,true需要,false不需要
    private boolean firstFlag; // 用于判断是否是首次输入,true首次,false不是首次
    private double result; // 计算结果
    public MainActivity() {
        // 初始化各项值
        result = 0; // x的值
        firstFlag = true; // 是首次运算
        clearFlag = false; // 不需要清空
        operator = "="; // 运算符
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取运算符
        btnOperator[0] = (Button) findViewById(R.id.plus);
        btnOperator[1] = (Button) findViewById(R.id.subtract);
        btnOperator[2] = (Button) findViewById(R.id.multiply);
        btnOperator[3] = (Button) findViewById(R.id.divide);
        btnOperator[4] = (Button) findViewById(R.id.equal);
        // 获取数字
        btnNum[0] = (Button) findViewById(R.id.num0);
        btnNum[1] = (Button) findViewById(R.id.num1);
        btnNum[2] = (Button) findViewById(R.id.num2);
        btnNum[3] = (Button) findViewById(R.id.num3);
        btnNum[4] = (Button) findViewById(R.id.num4);
        btnNum[5] = (Button) findViewById(R.id.num5);
        btnNum[6] = (Button) findViewById(R.id.num6);
        btnNum[7] = (Button) findViewById(R.id.num7);
        btnNum[8] = (Button) findViewById(R.id.num8);
        btnNum[9] = (Button) findViewById(R.id.num9);
        btnNum[10] = (Button) findViewById(R.id.point);

        // 初始化显示结果区域
        textView=(TextView) findViewById(R.id.Result);
        textView.setText("0.0");
        // 实例化监听器对象
        NumberAction na = new NumberAction();
        OperatorAction oa = new OperatorAction();
        for (Button bc : btnOperator) {
            bc.setOnClickListener((View.OnClickListener) oa);
        }
        for (Button bc : btnNum) {
            bc.setOnClickListener((View.OnClickListener) na);
        }
        // clear按钮的动作
        btnClear = (Button) findViewById(R.id.clear);
        btnClear.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                textView.setText("0.0");
                // 初始化各项值
                result = 0; // x的值
                firstFlag = true; // 是首次运算
                clearFlag = false; // 不需要清空
                operator = "="; // 运算符

            }
        });
    }

    //数字按钮监听器
    private class NumberAction implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            Button btn = (Button) view;
            String input = btn.getText().toString();


            if (firstFlag) { // 首次输入
                // 一上就".",就什么也不做
                if (input.equals(".")) {
                    return;
                }
                // 如果是"0.0"的话,就清空
                if (textView.getText().toString().equals("0.0")) {
                    textView.setText("");
                }
                firstFlag = false;// 改变是否首次输入的标记值
            } else {
                String textViewStr = textView.getText().toString();
                // 判断显示区域的值里面是否已经有".",如果有,输入的又是".",就什么都不做
                if (textViewStr.indexOf(".") != -1 && input.equals(".")) {
                    return;
                }
                // 判断显示区域的值里面只有"-",输入的又是".",就什么都不做
                if (textViewStr.equals("-") && input.equals(".")) {
                    return;
                }
                // 判断显示区域的值如果是"0",输入的不是".",就什么也不做
                if (textViewStr.equals("0") && !input.equals(".")) {
                    return;
                }
            }

            // 如果我点击了运算符以后,再输入数字的话,就要清空显示区域的值
            if (clearFlag) {
                textView.setText("");
                clearFlag = false;// 还原初始值,不需要清空
            }
            textView.setText(textView.getText().toString() + input);// 设置显示区域的值
        }
    }

    //符号按钮监听器
    private class OperatorAction implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            Button btn = (Button) view;
            String inputOperator = (String) btn.getText();

            if (firstFlag) {// 首次输入"-"的情况
                if (inputOperator.equals("-")) {
                    textView.setText("-");// 显示区域的内容设置为"-"
                    firstFlag = false;// 改变首次输入的标记
                }
            } else {

                if (!clearFlag) {// 如果flag=false不需要清空显示区的值,就调用方法计算

                    calculate(Double.parseDouble(textView.getText().toString()));// 保存显示区域的值,并计算
                }
                // 保存你点击的运算符
                operator = inputOperator;
                clearFlag = true;// 因为我这里已经输入过运算符,
            }
        }
    }

    // 计算用的方法

    public void calculate(double x) {

        if (operator.equals("+")) {
            result += x;
        } else if (operator.equals("-")) {
            result -= x;
        } else if (operator.equals("*")) {
            result *= x;
        } else if (operator.equals("/")) {
            result /= x;
        } else if (operator.equals("=")) {
            result = x;
        }
        textView.setText("" + result);

    }

}

运行结果

1+1.5=2.5

安卓简易计算器

清除

安卓简易计算器

3-0.8=2.2

安卓简易计算器

5-3=2

安卓简易计算器

0/4=0

安卓简易计算器

开发日志

      这是安卓第一次作业,我按照课本先把布局完成,书上的组件都没有加上id,所以我都自行补充了。然后就剩下Java文件了,我上网参考了相关资料,并且进行学习与理解。基本思路就是声明定义各组件并且为之设置监听器,获取内容并且赋予计算方法。

      第一次运行,结果因为电脑配置太低开不了虚拟化技术而用不了模拟器,上网搜了可以不开虚拟化技术的模拟器结果都不可以,这过程真的太坎坷了。