使用Android studio 3.0.1实现简单计算器

计算器是日常常用的计算工具,此次介绍一种由Android studio实现的简易计算器,能够实现基本的加减乘除,删除和清空功能。

实现效果图如下:

使用Android studio 3.0.1实现简单计算器_第1张图片

首先介绍一下使用的资源文件:

1.res -> values -> colors.xml文件,可以默认,可以自己加入颜色样本,只是为了方便色号对比和查询,可自行选择喜欢的颜色。



#3F51B5
#303F9F
#FF4081

#FFFFFF
#0d0000
#979797
#238423
#d4be4f

2.res ->drawable -> shape.xml文件,可以设置按钮颜色以及点击按钮后的显示色。(另外还可以设置按钮形状和颜色形式,例如可以将按钮设置为圆角,将按钮颜色设置为渐变色等)



       
    

    

<实现计算器的代码为:

1.activity_main.xm中计算器页面布局相关代码:

此处代码可以结合效果图来看,键盘处前三行都为线性布局,后两行包含了布局管理器的嵌套。





    

    

        

2.接下来为MainActivity.Java,即为计算器中实现计算功能的核心代码:

这一部分包括按钮的绑定与监听,此次采用了Android Butterknife 8.5.1 版本的插件,插件的配置详见如下链接:

https://blog.csdn.net/niubitianping/article/details/54893571

package com.example.princess.mycounterf;

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

import butterknife.BindView;
import butterknife.OnClick;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.input)
    EditText input;

    @BindView(R.id.clear)
    Button clear;
    @BindView(R.id.div)
    Button div;
    @BindView(R.id.mul)
    Button mul;
    @BindView(R.id.delete)
    Button delete;

    @BindView(R.id.num7)
    Button num7;
    @BindView(R.id.num8)
    Button num8;
    @BindView(R.id.num9)
    Button num9;
    @BindView(R.id.sub)
    Button sub;
    @BindView(R.id.num4)
    Button num4;
    @BindView(R.id.num5)
    Button num5;
    @BindView(R.id.num6)
    Button num6;
    @BindView(R.id.add)
    Button add;
    @BindView(R.id.num1)
    Button num1;
    @BindView(R.id.num2)
    Button num2;
    @BindView(R.id.num3)
    Button num3;
    @BindView(R.id.num0)
    Button num0;
    @BindView(R.id.point)
    Button dian;
    @BindView(R.id.equal)
    Button equal;

    private  String ss = "";
    private  boolean fu = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.clear, R.id.div, R.id.mul, R.id.delete, R.id.num7, R.id.num8, R.id.num9, R.id.sub,
            R.id.num4, R.id.num5, R.id.num6, R.id.add, R.id.num1, R.id.num2, R.id.num3, R.id.num0, R.id.point , R.id.equal})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.clear:
            {
                ss="";
                input.setText(ss);
            }
            break;
            case R.id.delete://先判断是否为空,再进行删除
            {
                if(ss.indexOf(" ")==ss.length()-3)
                {
                    ss= ss.substring(0,ss.length() - 2);
                }
                if(ss.length()>0)
                {
                    ss= ss.substring(0,ss.length() - 1);
                }
                input.setText(ss);
            }
            break;
            case R.id.mul:
            {
                if(ss.length()==0)
                {
                    break;
                }
                if(ss.contains(" "))
                {
                    if(ss.indexOf(" ")==ss.length()-3||ss.indexOf(" ")==ss.length()-2||ss.indexOf(" ")==ss.length()-1) break;
                    getResult();
                }
                fu=true;
                ss+=" × ";
                input.setText(ss);
            }
            break;
            case R.id.div:
            {
                if(ss.length()==0)
                {
                    break;
                }
                if(ss.contains(" "))
                {
                    if(ss.indexOf(" ")==ss.length()-3||ss.indexOf(" ")==ss.length()-2||ss.indexOf(" ")==ss.length()-1) break;
                    getResult();
                }
                fu=true;
                ss+=" ÷ ";
                input.setText(ss);
            }
            break;
            case R.id.num7:
            {
                ss+="7";
                input.setText(ss);
            }
            break;
            case R.id.num8:
            {
                ss+="8";
                input.setText(ss);
            }
            break;
            case R.id.num9:
            {
                ss+="9";
                input.setText(ss);
            }
            break;
            case R.id.sub:
            {
                if(ss.length()==0)
                {
                    break;
                }
                if(ss.contains(" "))
                {
                    if(ss.indexOf(" ")==ss.length()-3||ss.indexOf(" ")==ss.length()-2||ss.indexOf(" ")==ss.length()-1) break;
                    getResult();
                }
                fu=true;
                ss+=" - ";
                input.setText(ss);
            }
            break;
            case R.id.num4:
            {
                ss+="4";
                input.setText(ss);
            }
            break;
            case R.id.num5:
            {
                ss+="5";
                input.setText(ss);
            }
            break;
            case R.id.num6:
            {
                ss+="6";
                input.setText(ss);
            }
            break;
            case R.id.add:
            {
                if(ss.length()==0)
                {
                    break;
                }
                if(ss.contains(" "))
                {
                    if(ss.indexOf(" ")==ss.length()-3||ss.indexOf(" ")==ss.length()-2||ss.indexOf(" ")==ss.length()-1) break;
                    getResult();
                }
                fu=true;
                ss+=" + ";
                input.setText(ss);
            }
            break;
            case R.id.num1:
            {
                ss+="1";
                input.setText(ss);
            }
            break;
            case R.id.num2:
            {
                ss+="2";
                input.setText(ss);
            }
            break;
            case R.id.num3:
            {
                ss+="3";
                input.setText(ss);
            }
            break;
            case R.id.num0:
            {
                ss+="0";
                input.setText(ss);
            }
            break;
            case R.id.point:
            {
                if(ss.length()==0||ss.indexOf(" ")==ss.length()-3||ss.lastIndexOf(".")>ss.indexOf(" "))
                {
                    break;
                }
                else
                {
                    ss+=".";
                    input.setText(ss);
                }
            }
            break;
            case R.id.equal:
                getResult();
                break;
        }
    }

    private void getResult()
    {
        double result=0;
        if(ss==null||ss.equals("")) return;
        if(!ss.contains(" "))  return;
        //截取运算符前面的字符串
        String s1=ss.substring(0,ss.indexOf(" "));
        //截取的运算符
        String op=ss.substring(ss.indexOf(" ")+1,ss.indexOf(" ")+2);
        //截取运算符后面的字符串
        String s2=ss.substring(ss.indexOf(" ")+3);

        if(!s1.equals("")&&!s2.equals(""))
        {
            double d1=Double.parseDouble(s1);
            double d2=Double.parseDouble(s2 );
            switch (op)
            {
                case "+": result=d1+d2;break;
                case "-": result=d1-d2;break;
                case "×": result=d1*d2;break;
                case "÷":
                {
                    if(d2==0)
                    {
                        Toast.makeText(this, "不能除以零", Toast.LENGTH_SHORT).show();
                        break;
                    }
                    result=d1/d2*1.0;
                }
                break;
            }

            int r = (int)  result;
            if(r==result)//即计算所得结果“result”为整数,实际result为doublel类型
            {
                input.setText(""+r);
                ss=""+r;
            }
            else//计算所得结果含有小数位
            {
                input.setText(result+"");
                ss=""+result;
            }

        }
    }
}

3.在AndroidManifest.xml文件的活动后加入:

android:theme=”@style/Theme.AppCompat.DayNight.NoActionBar”

 如果顺利的话该计算器就可以正常运行了。

在此次小型简易计算器的制作过程中,虽说很简单,但是依然出现了许多各种各样的小问题,这种时候大都需要我们不断查阅资料,找到合适的方法解决问题。学习的路上,共勉。

你可能感兴趣的:(Android)