zoukankan      html  css  js  c++  java
  • 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) + "");
                }
            }
        }
    }
  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/xs104/p/4739570.html
Copyright © 2011-2022 走看看