计算器是日常常用的计算工具,此次介绍一种由Android studio实现的简易计算器,能够实现基本的加减乘除,删除和清空功能。
实现效果图如下:
首先介绍一下使用的资源文件:
1.res -> values -> colors.xml文件,可以默认,可以自己加入颜色样本,只是为了方便色号对比和查询,可自行选择喜欢的颜色。
#3F51B5
#303F9F
#FF4081
#FFFFFF
#0d0000
#979797
#238423
#d4be4f
2.res ->drawable -> shape.xml文件,可以设置按钮颜色以及点击按钮后的显示色。(另外还可以设置按钮形状和颜色形式,例如可以将按钮设置为圆角,将按钮颜色设置为渐变色等)
<实现计算器的代码为:
此处代码可以结合效果图来看,键盘处前三行都为线性布局,后两行包含了布局管理器的嵌套。
这一部分包括按钮的绑定与监听,此次采用了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;
}
}
}
}
android:theme=”@style/Theme.AppCompat.DayNight.NoActionBar”
如果顺利的话该计算器就可以正常运行了。
在此次小型简易计算器的制作过程中,虽说很简单,但是依然出现了许多各种各样的小问题,这种时候大都需要我们不断查阅资料,找到合适的方法解决问题。学习的路上,共勉。