安卓开发日志(1)——实现计算器的功能

一 、布局

用了GridLayout布局,activity_main_xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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:rowCount="6"
    android:columnCount="4"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/textView1"
        android:layout_width="349dp"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_marginLeft="4px"
        android:gravity="right"
        android:hint="0"
        android:textColor="#000000"
        android:textSize="50dip" />

    <Button
        android:id="@+id/main_btndel"
        android:layout_width="351dp"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
        android:textSize="26sp" />
    <Button
        android:id="@+id/main_btn1"
        android:text="1"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn2"
        android:text="2"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn3"
        android:text="3"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btnjj"
        android:text="+"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn4"
        android:text="4"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn5"
        android:text="5"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn6"
        android:text="6"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btnj"
        android:text="-"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn7"
        android:text="7"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn8"
        android:text="8"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn9"
        android:text="9"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btnx"
        android:text="×"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btnd"
        android:text="."
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn0"
        android:text="0"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btnc"
        android:text="÷"
        android:textSize="26sp"
        android:gravity="center"
        />
    <Button
        android:id="@+id/main_btn1d"
        android:text="="
        android:textSize="26sp"
        android:gravity="center"
        />
</GridLayout>

效果图:

安卓开发日志(1)——实现计算器的功能

说明:按照书上的例子,我先设置一个大的GridLayout布局,然后再镶嵌两个GridLayout布局,分别是按钮和输入框 。

二、功能实现

package com.example.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
     EditText textView1 ;
     Button main_btn1;
     Button main_btn2;
     Button main_btn3;
     Button main_btn4;
     Button main_btn5;
     Button main_btn6;
     Button main_btn7;
     Button main_btn8;
     Button main_btn9;
     Button main_btn0;
     Button main_btnjj;
     Button main_btnj;
     Button main_btnx;
     Button main_btnc;
     Button main_btnd;
     Button main_btn1d;
     Button main_btndel;

    boolean clear_flag;//清空标识

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
         main_btn1 = findViewById(R.id.main_btn1);
         main_btn2 = findViewById(R.id.main_btn2);
         main_btn3 = findViewById(R.id.main_btn3);
         main_btn4 = findViewById(R.id.main_btn4);
         main_btn5 = findViewById(R.id.main_btn5);
         main_btn6 = findViewById(R.id.main_btn6);
         main_btn7 = findViewById(R.id.main_btn7);
         main_btn8 = findViewById(R.id.main_btn8);
         main_btn9 = findViewById(R.id.main_btn9);
         main_btn0 = findViewById(R.id.main_btn0);
         main_btnjj = findViewById(R.id.main_btnjj);// +
         main_btnj = findViewById(R.id.main_btnj);// -
         main_btnx = findViewById(R.id.main_btnx);// *
         main_btnc = findViewById(R.id.main_btnc); // /
         main_btnd = findViewById(R.id.main_btnd);//小数点
         main_btn1d = findViewById(R.id.main_btn1d);//=
         main_btndel = findViewById(R.id.main_btndel);//清空
         textView1= (EditText) findViewById(R.id.textView1);//结果集


    }
    /**
     *设置点击事件
     */
    private void initClickEvent() {
        main_btn0.setOnClickListener(this);
        main_btn1.setOnClickListener(this);
        main_btn2.setOnClickListener(this);
        main_btn3.setOnClickListener(this);
        main_btn4.setOnClickListener(this);
        main_btn5.setOnClickListener(this);
        main_btn6.setOnClickListener(this);
        main_btn7.setOnClickListener(this);
        main_btn8.setOnClickListener(this);
        main_btn9.setOnClickListener(this);

        main_btnd.setOnClickListener(this);
        main_btndel.setOnClickListener(this);

        main_btnjj.setOnClickListener(this);
        main_btnj.setOnClickListener(this);
        main_btnx.setOnClickListener(this);
        main_btnc.setOnClickListener(this);
        main_btn1d.setOnClickListener(this);
    }




    @Override
    public void onClick(View v) {
        //用switch来判断
        //拿id

        String input = textView1.getText().toString();
        switch (v.getId()){
            case R.id.main_btn0:
            case R.id.main_btn1:
            case R.id.main_btn2:
            case R.id.main_btn3:
            case R.id.main_btn4:
            case R.id.main_btn5:
            case R.id.main_btn6:
            case R.id.main_btn7:
            case R.id.main_btn8:
            case R.id.main_btn9:
            case R.id.main_btnd:
                if(clear_flag){
                    clear_flag = false;
                    textView1.setText("");//赋值为空
                }
                textView1.setText(input + ((Button)v).getText());//结果集就为本身
                break;
            case R.id.main_btnjj:
            case R.id.main_btnj:
            case R.id.main_btnx:
            case R.id.main_btnc:
                if(clear_flag){
                    clear_flag = false;
                    input = "";
                    textView1.setText("");
                }
                textView1.setText(input + " " + ((Button)v).getText() + " ");
                break;
            case R.id.main_btndel:
                if(clear_flag){
                    clear_flag = false;
                    input = "";
                    textView1.setText("");
                }else if(input != null || !input.equals("")) {//如果获取到的内容为空
                    textView1.setText(input.substring(0, input.length() - 1));//结果集为空
                }
                break;
            case R.id.main_btn1d://运算结果  =
                getResult();//调用处理结果集的方法
                break;


        }
    }

    private void getResult() {
        String exp = textView1.getText().toString();//获取文本框的内容
        if (exp == null || exp.equals("")) {
            return;
        }
        if (!exp.contains(" ")) {
            return;
        }
        if (clear_flag) {
            clear_flag = false;
            return;
        }
        clear_flag = true;
        double result = 0;

        //进行截取
        //运算符前的数字
        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类型
            double d2 = Double.parseDouble(s2);
            if (op.equals("+")) {//如果是 +
                result = d1 + d2;
            } else if (op.equals("-")) {
                result = d1 - d2;
            } else if (op.equals("*")) {
                result = d1 * d2;
            } else if (op.equals("/")) {
                //否则执行正常是除法运算
                if (d2 == 0) { //如果被除数是0
                    result = 0; //则结果是0
                } else result = d1 / d2;
            }

            if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {//如果是整数类型
                int r = (int) result; //都是整形
                textView1.setText(r + "");
            } else {
                textView1.setText(result + "");
            }
        } else if (!s1.equals("") && s2.equals("")) {//如果是只输入运算符前的数
            textView1.setText(exp);//直接返回当前文本框的内容
        } else if (s1.equals("") && !s2.equals("")) {//如果是只输入运算符后面的数
            double d2 = Double.parseDouble(s2);

            //运算符前没有输入数字
            if (op.equals("+")) {
                result = 0 + d2;
            } else if (op.equals("-")) {
                result = 0 - d2;
            } else if (op.equals("*")) {
                result = 0;
            } else if (op.equals("/")) {
                result = 0;
            }

            if (!s1.contains(".") && !s2.contains(".")) {
                int r = (int) result;
                textView1.setText(r + "");
            } else {
                textView1.setText(result + "");
            }
        } else {
            textView1.setText("");

        }
    }}

运行

安卓开发日志(1)——实现计算器的功能 安卓开发日志(1)——实现计算器的功能

第一次进行Android开发,算是不错了。

 

上一篇:Android中LayoutInflater()方法


下一篇:Android LayoutInflater详解