美文网首页安卓开发Android知识点和文章分享
0xA1 Android开发之简易四则计算器

0xA1 Android开发之简易四则计算器

作者: 丿feng | 来源:发表于2019-02-10 22:28 被阅读1次

    0x00 功能

    基于Java的Android四则运算器,可以进行浮点数的四则运算


    计算器

    0x01 开发工具

    Android Studio、雷电模拟器、Android手机

    0x02 基本简介

    总体使用网格布局(七行四列)使用了两个TextView和十八个按钮,其中TextVIew采用滚动设计(跑马灯)解决TextView文本过长的显示问题,支持浮点数的+ - * / 以及百分比运算

    0x03 踩坑经历

    1.布局,由于不熟练导致的布局频频受阻
    2.按钮监听,逐个按钮监听工作量有点大,故采用Button数组批量绑定并且监听,但是此举必先定义Button
    3.逻辑代码,为了APP有更友好的交互,逻辑代码方面实在浪费了n多时间

    0x04 核心代码

    activity_main.xml文件
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.feng.learn3.MainActivity"
    
        >
    
        <GridLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:rowCount="7"
            android:columnCount="4"
            android:id="@+id/gridLayout"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">
    
            <TextView
                android:gravity="right"
                android:textColor="#292828"
                android:text="0"
                android:layout_width="match_parent"
                android:ellipsize="marquee"
                android:singleLine="true"
                android:marqueeRepeatLimit="marquee_forever"
                android:textSize="60sp"
                android:layout_height="@dimen/button_height"
                android:layout_columnSpan="4"
                android:layout_column="0"
                android:layout_row="1"
                android:id="@+id/textView"
                android:layout_below="@+id/gridLayout"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true" />
        
            <Button
                android:text="@string/clear"
                android:layout_column="0"
                android:layout_row="2"
                android:layout_columnSpan="1"
                android:layout_gravity="fill"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/button_height"
                android:id="@+id/buttonC" />
                        
            <!--……以下省略-->
        </GridLayout>
    </RelativeLayout>
    
    MainActivity.java文件
    package com.feng.learn3;
        
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.Button;
        import android.widget.TextView;
        
        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
            //按钮0~9
            private Button buttonP;
            private Button button0;
            private Button button1;
            private Button button2;
            private Button button3;
            private Button button4;
            private Button button5;
            private Button button6;
            private Button button7;
            private Button button8;
            private Button button9;
            //按钮 + - * / =
            private Button buttonA;
            private Button buttonS;
            private Button buttonM;
            private Button buttonD;
            private Button buttonE;
            //按钮 CE C
            private Button buttonB;
            private Button buttonC;
            //百分号按钮
            private Button buttonPer;
            //TextView
            private TextView textView;
            private TextView hintTestView;
            //左右操作数
            private Double left = 0.0;
            private Double right = 0.0;
            //操作符
            private String operator = "#";
            //操作符选中标志
            private byte tag = 0;
        
            Button[] buttons = {buttonP,button0,button1,button2,button3,button4,button5,button6,button7,
                    button8,button9,buttonA,buttonS,buttonM,buttonD,buttonE,buttonB,buttonC,buttonPer};
            Integer[] ids = {R.id.buttonP,R.id.button0,R.id.button1,R.id.button2,R.id.button3,R.id.button4,R.id.button5,
                    R.id.button6,R.id.button7,R.id.button8,R.id.button9,R.id.buttonA,R.id.buttonS,
                    R.id.buttonM,R.id.buttonD,R.id.buttonE,R.id.buttonB,R.id.buttonC,R.id.buttonPer};
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                //绑定Textiews
                textView = (TextView) findViewById(R.id.textView);
                hintTestView = (TextView) findViewById(R.id.textView1);
                textView.setSelected(true);
                hintTestView.setSelected(true);
                //绑定Buttons并监听之
                for (int i = 0; i < 19; i++){
                    buttons[i] = (Button) findViewById(ids[i]);
                    buttons[i].setOnClickListener(this);
                }
            }
        
            @Override
            public void onClick(View view) {
                //逻辑代码
                String op = (String) ((Button)view).getText();
                switch (op){
                    case "0":
                    case "1":
                    case "2":
                    case "3":
                    case "4":
                    case "5":
                    case "6":
                    case "7":
                    case "8":
                    case "9":
                        for (int i = 11; i < 17; i++){
                            buttons[i].setEnabled(true);
                        }
                        if (tag == 1){
                            tag = 0;
                            textView.setText("");
                        }
                        if (textView.getText().toString().startsWith("0") && !textView.getText().toString().startsWith("0.")){
                            textView.setText(op);
                        } else {
                            textView.setText(textView.getText().toString().concat(op));
                        }
                        break;
                    case ".":
                        if (tag == 1){
                            tag = 0;
                            textView.setText("0.");
                        } else {
                            textView.setText(textView.getText().toString().concat(op));
                        }
                        buttons[0].setEnabled(false);//"."点按钮在每个操作数仅可使用一次
                        break;
                    case "%":
                        Double temp = 0.0;
                        temp = temp.valueOf(textView.getText().toString());
                        temp /= 100;
                        textView.setText(temp.toString());
                        break;
                    case "+":
                    case "-":
                    case "*":
                    case "/":
                        setOperator(op);break;
                    case "=":
                        setOperator(op);
                        textView.setText(left.toString());
                        hintTestView.setText("");
                        for (int i = 11; i < 17; i++){
                            buttons[i].setEnabled(false);
                        }
                        left = 0.0;
                        right = 0.0;
                        break;
                    case "CE"://后退一位
                        textView.setText(textView.getText().subSequence(0,textView.getText().length()-1));
                        break;
                    case "C"://清零
                        textView.setText("0");
                        hintTestView.setText("");
                        buttons[0].setEnabled(true);
                        for (int i = 11; i < 17; i++){
                            buttons[i].setEnabled(true);
                        }
                        left = 0.0;
                        right = 0.0;
                        tag = 0;
                        break;
                }
            }
        
            //选中对应操作符计算左右操作数结果
            public void setOperator(String op){
                if (tag == 1){
                    //临时更换操作符
                    hintTestView.setText(hintTestView.getText().subSequence(0,hintTestView.getText().length()-2) + op + " ");
                } else {
                    if (hintTestView.getText().toString().equals("")){
                        hintTestView.setText(textView.getText() + " " + op + " ");
                    } else {
                        hintTestView.setText(hintTestView.getText().toString() + textView.getText() +  " " + op + " ");
                    }
                    right = right.valueOf(textView.getText().toString());
                    left = new Cal().cal(operator,left,right);
                    textView.setText(left.toString());
                    tag = 1;
                }
                buttons[0].setEnabled(true);
                operator = op;
            }
        
        }
    
    Cal.java文件
    package com.feng.learn3;
    
    /**
     * Created by 枫 on 2019/2/10.
     */
    
    public class Cal {
        public double cal (String op,double left,double right){
            double ans = 0.0;
            switch (op){
                case "+":ans = add(left,right);break;
                case "-":ans = sub(left, right);break;
                case "*":ans = mul(left, right);break;
                case "/":ans = div(left, right);break;
            }
            return ans;
        }
    
        public double add (double left,double right){
            return left + right;
        }
    
        public double sub (double left,double right){
            return left - right;
        }
    
        public double mul (double left,double right){
            return left * right;
        }
    
        public double div (double left,double right){
            if (right != 0){
                return left/right;
            } else {
                return 0;
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:0xA1 Android开发之简易四则计算器

        本文链接:https://www.haomeiwen.com/subject/ylwxeqtx.html