android studio 日志 (三)用GridLayout设计一个有简单计算功能的计算器

根据教材的界面,并结合学习其他人的代码,做出一个简单的计算器

最终效果图
android studio 日志 (三)用GridLayout设计一个有简单计算功能的计算器_第1张图片
首先是创建一个空的项目,创建一个Empty Activity,具体操作在日志一有说。

打开activity_main.xml文件,用GridLayout布局做一个简单的计算器界面

android studio 日志 (三)用GridLayout设计一个有简单计算功能的计算器_第2张图片




    

    

有的颜色代码可能会因为没有而报错,我们需要在colors.xml中添加代码
android studio 日志 (三)用GridLayout设计一个有简单计算功能的计算器_第3张图片



    #3F51B5
    #303F9F
    #FF4081
    #00000000
    #232222
    #645d5d
    
    #FFFFFF
    
    #FFFFF0
    
    #FFFFE0
    
    #FFFF00
    
    #FFFAFA
    
    #FFFAF0
    
    #FFFACD
    
    #FFF8DC
    
    #FFF5EE
    
    #FFF0F5
    
    #FFEFD5
    
    #FFEBCD
    
    #FFE4E1
    
    #FFE4C4
    
    #FFE4B5
    
    #FFDEAD
    
    #FFDAB9
    
    #FFD700
    
    #FFC0CB
    
    #FFB6C1
    
    #FFA500
    
    #FFA07A
    
    #FF8C00
    
    #FF7F50
    
    #FF69B4
    
    #FF6347
    
    #FF4500
    
    #FF1493
    
    #FF00FF
    
    #FF0000
    
    #FDF5E6
    
    #FAFAD2
    
    #FAF0E6
    
    #FAEBD7
    
    #FA8072
    
    #F8F8FF
    
    #F5FFFA
    
    #F5F5F5
    
    #F5F5DC
    
    #F5DEB3
    
    #F4A460
    
    #F0FFFF
    
    #F0FFF0
    
    #F0F8FF
    
    #F0E68C
    
    #F08080
    
    #EEE8AA
    
    #EE82EE
    
    #E9967A
    
    #E6E6FA
    
    #E0FFFF
    
    #DEB887
    
    #DDA0DD
    
    #DCDCDC
    
    #DC143C
    
    #DB7093
    
    #DAA520
    
    #DA70D6
    
    #D8BFD8
    
    #D3D3D3
    
    #D2B48C
    
    #D2691E
    
    #CD853F
    
    #CD5C5C
    
    #C71585
    
    #C0C0C0
    
    #BDB76B
    
    #BC8F8F
    
    #BA55D3
    
    #B8860B
    
    #B22222
    
    #B0E0E6
    
    #B0C4DE
    
    #AFEEEE
    
    #ADFF2F
    
    #ADD8E6
    
    #A9A9A9
    
    #A52A2A
    
    #A0522D
    
    #9932CC
    
    #98FB98
    
    #9400D3
    
    #9370DB
    
    #90EE90
    
    #8FBC8F
    
    #8B4513
    
    #8B008B
    
    #8B0000
    
    #8A2BE2
    
    #87CEFA
    
    #87CEEB
    
    #808080
    
    #808000
    
    #800080
    
    #800000
    
    #7FFFD4
    
    #7FFF00
    
    #7CFC00
    
    #7B68EE
    
    #778899
    
    #708090
    
    #6B8E23
    
    #6A5ACD
    
    #696969
    
    #66CDAA
    
    #6495ED
    
    #5F9EA0
    
    #556B2F
    
    #4B0082
    
    #48D1CC
    
    #483D8B
    
    #4682B4
    
    #4169E1
    
    #40E0D0
    
    #3CB371
    
    #32CD32
    
    #2F4F4F
    
    #2E8B57
    
    #228B22
    
    #20B2AA
    
    #1E90FF
    
    #191970
    
    #00FFFF
    
    #00FFFF
    
    #00FF7F
    
    #00FF00
    
    #00FA9A
    
    #00CED1
    
    #00BFFF
    
    #008B8B
    
    #008080
    
    #008000
    
    #006400
    
    #0000FF
    
    #0000CD
    
    #00008B
    
    #000080
    
    #000000
    
    #99cc33
    
    #cccccc
    
    #8f8f8f
    


接着在strings.xml中修改归零按钮的名字

android studio 日志 (三)用GridLayout设计一个有简单计算功能的计算器_第4张图片


    清除


最后是打开MainActivity.java文件,写入代码,初始化程序

(实现功能代码是参考他人改的,增添了很多我的注释,基本新代码都注释了,如有理解错误,请指出)

package com.example.test3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import java.util.LinkedList;
import java.util.List;



public class MainActivity extends Activity {

    private final String TAG = "MainActivity";
    private final int STATE_INIT=0;           //输入第一个数字
    private final int STATE_EDITING=1;        //数字编辑阶段
    private final int STATE_RESULT=2;         //返回结果状态 不可以对数字修改 只可以进行运算 或重新开始一次新的运算
    List list;

    private int state;                                //输入框的状态
    private double result;
    private double cacheCount;
    char operate;
    TextView tv_display;
    StringBuffer sb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);   //显示
        init();
    }

    /**
     * 程序初始化
     */
    private void init(){
        tv_display=(TextView)findViewById(R.id.tv_display);  //电子屏显示(即数字显示)
        list=new LinkedList();  //重构,链表List只存储StringBuffer类型,StringBuffer是String的升级
        result=0;
        cacheCount=0;
        operate='+';
        state=STATE_INIT;
        sb=new StringBuffer();  //创建对象实例
        tv_display.setText(sb);  //显示屏显示
    }

    public void onClick(View v){
        switch (v.getId()){
            case R.id.bt_0:  //button 0
                updateData('0');
                break;
            case R.id.bt_1:
                updateData('1');
                break;
            case R.id.bt_2:
                updateData('2');
                break;
            case R.id.bt_3:
                updateData('3');
                break;
            case R.id.bt_4:
                updateData('4');
                break;
            case R.id.bt_5:
                updateData('5');
                break;
            case R.id.bt_6:
                updateData('6');
                break;
            case R.id.bt_7:
                updateData('7');
                break;
            case R.id.bt_8:
                updateData('8');
                break;
            case R.id.bt_9:
                updateData('9');
                break;
            case R.id.bt_point:
                updateData('.');
                break;
            /*case R.id.bt_delete:  //退一格
                updateData('d');
                break; */
            case R.id.bt_add:
                updateData('+');
                break;
            case R.id.bt_minus:
                updateData('-');
                break;
            case R.id.bt_multiply:
                updateData('*');
                break;
            case R.id.bt_dividi:
                updateData('/');
                break;
            case R.id.bt_equal:
                updateData('=');
                break;
            case R.id.tv_init:  //清屏
                init();
                break;
        }
    }

    /**
     * 每通过按钮 传入该方法一个字符
     * 实现对数据的更新
     */
    public void updateData(char ch){
        if ((ch<='9'&& ch>='0')||ch=='.'){
            sb.append(ch);  //append方法的作用是在一个StringBuffer对象后面追加字符串,这里即在显示屏显示的sb后再+一个数,如9+7为97
            tv_display.setText(sb);
        }
        switch (ch){
            case 'd':                                           //删除,退一位
                if (sb.length()==0)
                    break;
                sb.deleteCharAt(sb.length() - 1);  //用来删除StringBuffer字符串指定索引字符的方法
                tv_display.setText(sb);
                break;
            case '+':
                if(sb.length()==0){
                    init();
                    break;
                }
                cacheCount=Double.parseDouble(sb.toString()); //把数字类型的字符串,转换成double类型
                operator(); //调用运算方法
                operate='+';
                break;
            case '-':
                if(sb.length()==0){
                    init();
                    break;
                }
                cacheCount=Double.parseDouble(sb.toString());
                operator();
                operate='-';
                break;
            case '*':
                if(sb.length()==0){
                    init();
                    break;
                }
                cacheCount=Double.parseDouble(sb.toString());
                operator();
                operate='*';
                break;
            case '/':
                if(sb.length()==0){
                    init();
                    break;
                }
                cacheCount=Double.parseDouble(sb.toString());
                operator();
                operate='/';
                break;
            case '=':
                if(sb.length()==0){
                    init();
                    break;
                }
                cacheCount=Double.parseDouble(sb.toString());
                operator();
                operate='+';
                cacheCount=0;
                result=0;
                break;
        }
        Log.d(TAG,cacheCount+"#"+result);
    }

    private void operator(){  //运算方法
        String str;
        switch (operate){
            case '+':
                result+=cacheCount;  //cacheCount是上述变成double型的数
                str= String.valueOf(result);  //把result转换成Double类型,在返回的时候new Double(),所以返回的是Double
                sb=new StringBuffer();
                //       state=STATE_RESULT;
                tv_display.setText(str);
                break;
            case '-':
                result-=cacheCount;
                str=String.valueOf(result);
                sb=new StringBuffer();
                //       state=STATE_RESULT;
                tv_display.setText(str);
                break;
            case '/':
                if(cacheCount==0){
                    tv_display.setText("除零错误");
                    init();
                    break;
                }
                result/=cacheCount;
                str=String.valueOf(result);
                sb=new StringBuffer();
                //       state=STATE_RESULT;
                tv_display.setText(str);
                break;
            case '*':
                result*=cacheCount;
                str=String.valueOf(result);
                sb=new StringBuffer();
                //       state=STATE_RESULT;
                tv_display.setText(str);
                break;
            case '=':
                result+=cacheCount;
                str= String.valueOf(result);
                sb=new StringBuffer();
                //       state=STATE_RESULT;
                tv_display.setText(str);
                cacheCount=0;
                result=0;
                break;
        }
    }


}

附上AndroidManifest.xml文件代码




    
        
            
                
                
            
        
    



最后运行程序,一切正常

android studio 日志 (三)用GridLayout设计一个有简单计算功能的计算器_第5张图片

你可能感兴趣的:(安卓,入门,日志)