• Android笔记(十六) 简易计算器


    实现功能:

             简单计算器

    布局及美化

             采用LinearLayout嵌套LinearLayout实现布局。

             要求

                       1. 按钮所有文字居于右下角

                       2. 按钮为白色,点击变成橘色

                       3. 显示屏文字居右显示并且为橘色

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">
    
        <!-- 显示屏组件 -->
        <EditText
            android:id="@+id/et_input"
            android:layout_width="330dp"
            android:layout_height="wrap_content"
            android:editable="false"
            android:gravity="right"
            android:textColor="#ffbf16"/>
    
        <!-- 一个垂直线性布局,用来放置所有按钮 -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="10dp"
            android:gravity="center_horizontal"
            android:orientation="vertical">
    
            <!-- 一个水平线性布局,用来放置C DEL ÷ × -->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">
    
                <Button
                    android:id="@+id/btn_clear"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="C  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_del"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="DEL  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_divide"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="÷  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_multiply"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="×  "
                    android:textSize="25sp" />
    
            </LinearLayout>
    
            <!-- 一个水平线性布局,用来放置7 8 9 - -->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center_horizontal"
                android:orientation="horizontal">
    
                <Button
                    android:id="@+id/btn_7"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="7  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_8"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="8  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_9"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="9  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_minus"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="-  "
                    android:textSize="25sp" />
            </LinearLayout>
    
            <!-- 一个水平线性布局,用来放置4 5 6 7 -->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center_horizontal"
                android:orientation="horizontal">
    
                <Button
                    android:id="@+id/btn_4"
                    android:layout_width="75dp"
                    android:layout_height="match_parent"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="4  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_5"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
    
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="5  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_6"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="6  "
                    android:textSize="25sp" />
    
                <Button
                    android:id="@+id/btn_sum"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    android:layout_marginLeft="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="+  "
                    android:textSize="25sp" />
            </LinearLayout>
    
            <!-- 一个水平布局,用来放置剩余按钮 -->
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal">
    
                <!-- 一个垂直布局,用来放置1 2 3 0 . 按钮 -->
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical">
    
    
                    <!-- 一个水平布局,用来放置1 2 3 按钮 -->
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp"
                        android:orientation="horizontal">
    
                        <Button
                            android:id="@+id/btn_1"
                            android:layout_width="75dp"
                            android:layout_height="75dp"
                            android:background="@drawable/white_btn_selector"
                            android:gravity="right|bottom"
                            android:text="1  "
                            android:textSize="25sp" />
    
                        <Button
                            android:id="@+id/btn_2"
                            android:layout_width="75dp"
                            android:layout_height="75dp"
                            android:layout_marginLeft="10dp"
                            android:background="@drawable/white_btn_selector"
                            android:gravity="right|bottom"
                            android:text="2  "
                            android:textSize="25sp" />
    
                        <Button
                            android:id="@+id/btn_3"
                            android:layout_width="75dp"
                            android:layout_height="75dp"
                            android:layout_marginLeft="10dp"
                            android:background="@drawable/white_btn_selector"
                            android:gravity="right|bottom"
                            android:text="3  "
                            android:textSize="25sp" />
                    </LinearLayout>
    
                    <!-- 一个水平布局,用来放置0 . 按钮 -->
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp"
                        android:gravity="center_horizontal"
                        android:orientation="horizontal">
    
                        <Button
                            android:id="@+id/btn_0"
                            android:layout_width="160dp"
                            android:layout_height="75dp"
                            android:background="@drawable/white_btn_selector"
                            android:gravity="right|bottom"
                            android:text="0  "
                            android:textSize="25sp" />
    
                        <Button
                            android:id="@+id/btn_point"
                            android:layout_width="75dp"
                            android:layout_height="75dp"
                            android:layout_marginLeft="10dp"
                            android:background="@drawable/white_btn_selector"
                            android:gravity="right|bottom"
                            android:text=".  "
                            android:textSize="25sp" />
                    </LinearLayout>
                </LinearLayout>
    
                <Button
                    android:id="@+id/btn_equal"
                    android:layout_width="75dp"
                    android:layout_height="160dp"
                    android:layout_marginLeft="10dp"
                    android:layout_marginTop="10dp"
                    android:background="@drawable/white_btn_selector"
                    android:gravity="right|bottom"
                    android:text="=  "
                    android:textSize="25sp" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    white_btn_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    
        <selector xmlns:android="http://schemas.android.com/apk/res/android" >
            <item android:state_selected="true"    android:drawable="@drawable/orange"/>
            <item android:state_focused="true" android:drawable="@drawable/orange" />
            <item android:state_pressed="true" android:drawable="@drawable/orange" />
            <item android:drawable="@drawable/white"/>
    
        </selector>

    orange.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#ffbf20"/>
    </shape>

    white.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#ffffff"/>
        <corners android:radius="2.0dp" />
    </shape>

             运行结果:

    逻辑实现

    MainActivity.java

    package cn.lixyz.counterdemo;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class MainActivity extends Activity implements View.OnClickListener {
    
        Button btn_0; //0数字按钮
        Button btn_1; //1数字按钮
        Button btn_2; //2数字按钮
        Button btn_3; //3数字按钮
        Button btn_4; //4数字按钮
        Button btn_5; //5数字按钮
        Button btn_6; //6数字按钮
        Button btn_7; //7数字按钮
        Button btn_8; //8数字按钮
        Button btn_9; //9数字按钮
        Button btn_point; //小数点按钮
        Button btn_clear; //clear数字按钮
        Button btn_del; //delete数字按钮
        Button btn_sum; //加按钮
        Button btn_minus; //减按钮
        Button btn_multiply; //乘按钮
        Button btn_divide; //除按钮
        Button btn_equal; //等于按钮
    
        String[] arr = new String[]{"+", "-", "×", "÷"};
    
        EditText et_input;//显示屏
    
        boolean clear_flag = true;//清空标识
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //实例化按钮
            btn_0 = (Button) findViewById(R.id.btn_0);
            btn_1 = (Button) findViewById(R.id.btn_1);
            btn_2 = (Button) findViewById(R.id.btn_2);
            btn_3 = (Button) findViewById(R.id.btn_3);
            btn_4 = (Button) findViewById(R.id.btn_4);
            btn_5 = (Button) findViewById(R.id.btn_5);
            btn_6 = (Button) findViewById(R.id.btn_6);
            btn_7 = (Button) findViewById(R.id.btn_7);
            btn_8 = (Button) findViewById(R.id.btn_8);
            btn_9 = (Button) findViewById(R.id.btn_9);
            btn_multiply = (Button) findViewById(R.id.btn_multiply);
            btn_point = (Button) findViewById(R.id.btn_point);
            btn_clear = (Button) findViewById(R.id.btn_clear);
            btn_del = (Button) findViewById(R.id.btn_del);
            btn_sum = (Button) findViewById(R.id.btn_sum);
            btn_minus = (Button) findViewById(R.id.btn_minus);
            btn_divide = (Button) findViewById(R.id.btn_divide);
            btn_equal = (Button) findViewById(R.id.btn_equal);
    
    
            //实例化显示屏
            et_input = (EditText) findViewById(R.id.et_input);
    
            //设置这些按钮的点击事件
            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_multiply.setOnClickListener(this);
            btn_point.setOnClickListener(this);
            btn_clear.setOnClickListener(this);
            btn_del.setOnClickListener(this);
            btn_sum.setOnClickListener(this);
            btn_minus.setOnClickListener(this);
            btn_divide.setOnClickListener(this);
            btn_equal.setOnClickListener(this);
    
        }
    
    
        @Override
        public void onClick(View v) {
            //获取目前显示屏上显示的数字,因为为了美观,在布局时,Text属性添加了空格,所以在获取到按钮内容之后,需要去掉空格
            String str = et_input.getText().toString();
    
            switch (v.getId()) {
                //如果点击的是0~9或者小数点,直接累加到屏幕上
                case R.id.btn_0:
                case R.id.btn_1:
                case R.id.btn_2:
                case R.id.btn_3:
                case R.id.btn_4:
                case R.id.btn_5:
                case R.id.btn_6:
                case R.id.btn_7:
                case R.id.btn_8:
                case R.id.btn_9:
                case R.id.btn_point:
                case R.id.btn_sum:
                case R.id.btn_minus:
                case R.id.btn_divide:
                case R.id.btn_multiply:
                    //因为传入的是一个View对象,所以需要强制转换为Button对象,才能使用getText()方法
                    if (clear_flag) {
                        et_input.setText(str + ((Button) v).getText());
                    } else {
                        et_input.setText(((Button) v).getText());
                        clear_flag = true;
                    }
                    Log.d("TEST", ((Button) v).getText().toString() + "    " + clear_flag + "");
                    break;
                //如果点击的是C,则将显示屏设置为空
                case R.id.btn_clear:
                    et_input.setText("");
                    break;
                //如果点击的是DEL,如果显示屏不为空,则将显示屏的内容最后一个字符去掉
                case R.id.btn_del:
                    if (str != null && !str.equals("")) {
                        et_input.setText(et_input.getText().toString().substring(0, str.length() - 1));
                    }
                    break;
                //如果点击的是等号,则进行运算,判断显示屏上的内容是否存在运算,如果不存在,直接显示当前文字,如果存在运算,进行运算,显示结果
                case R.id.btn_equal:
                    for (int i = 0; i <= arr.length-1; i++) {
                        if (et_input.getText().toString().contains(arr[i])) {
                            getResult(et_input.getText().toString());
                            break;
                        }
                    }
                   // et_input.setText(str);
                    clear_flag = false;
                    break;
            }
        }
    
        //运算方法
        public void getResult(String string) {
            Log.d("TEST", string);
            String[] arr2;
            Double d1;
            Double d2;
            if (string.contains("+")) {
                arr2 = string.split("\+");
                if (arr2[0].trim().length() == 0) {
                    d1 = 0.0;
                } else {
                    d1 = Double.parseDouble(arr2[0].replace(" ", ""));
                }
    
                if (arr2[1].trim().length() == 0) {
                    d2 = d1;
                } else {
                    d2 = Double.parseDouble(arr2[1].replace(" ", ""));
                }
                et_input.setText((d1 + d2) + "");
    
            } else if (string.contains("-")) {
    
                arr2 = string.split("\-");
                if (arr2[0].trim().length() == 0) {
                    d1 = 0.0;
                } else {
                    d1 = Double.parseDouble(arr2[0].replace(" ", ""));
                }
    
                if (arr2[1].trim().length() == 0) {
                    d2 = d1;
                } else {
                    d2 = Double.parseDouble(arr2[1].replace(" ", ""));
                }
                et_input.setText((d1 - d2) + "");
    
            } else if (string.contains("×")) {
                arr2 = string.split("\×");
                if (arr2[0].trim().length() == 0) {
                    d1 = 0.0;
                } else {
                    d1 = Double.parseDouble(arr2[0].replace(" ", ""));
                }
    
                if (arr2[1].trim().length() == 0) {
                    d2 = d1;
                } else {
                    d2 = Double.parseDouble(arr2[1].replace(" ", ""));
                }
                et_input.setText((d1 * d2) + "");
            } else if (string.contains("÷")) {
                arr2 = string.split("\÷");
                if (arr2[0].trim().length() == 0) {
                    d1 = 0.0;
                } else {
                    d1 = Double.parseDouble(arr2[0].replace(" ", ""));
                }
    
                if (arr2[1].trim().length() == 0) {
                    d2 = d1;
                } else {
                    d2 = Double.parseDouble(arr2[1].replace(" ", ""));
                }
                if (d2 == 0) {
                    et_input.setText("除数不能为0");
                } else {
                    et_input.setText((d1 / d2) + "");
                }
            }
        }
    }
  • 相关阅读:
    GitHub:如何构建一个股票市场知识图谱?(附代码&链接)
    java运行jar命令提示没有主清单属性
    Modern Qt Development: The Top 10 Tools You Should Be Using
    没本事就不要去追逐梦想了
    ddd
    5分钟快速构建苹果IPA免费发布服务器
    Windows热键注册的底层原理
    云设计模式-Design patterns for microservices
    ubuntu16安装最新版docker
    什么是Docker—无服务器计算服务
  • 原文地址:https://www.cnblogs.com/xs104/p/4739570.html
Copyright © 2020-2023  润新知