Android实现简易计算器小程序
本文实例为大家分享了android实现简易计算器小程序的具体代码,供大家参考,具体内容如下
目标效果:
通过编写代码,可以实现整数和小数的加减乘除运算,以及删除和清空的功能。
1.页面中button使用的是线性布局,最外边一个是父布局,第一行c,del,/,*为第一个子布局,第二行7,8,9,-为第二个子布局,第三行4,5,6,+为第三个子布局,第四五行为第四个子布局,第四个子布局中还有两个相当于是孙布局的级别,1,2,3为第一个孙布局,0和.为第二个孙布局,=在两个孙布局之外第四个子布局以内。因为计算器的水平竖直排列十分鲜明,所以可以用线性布局,当然也可以用表格布局来进行排布。
2.activity_main.xml页面用于存放所有控件。
activity_main.xml页面:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_margintop="40dp" android:layout_height="fill_parent" android:orientation="vertical" > <edittext android:id="@+id/etinput" android:layout_width="310dp" android:layout_height="60dip" android:editable="false" //代表不能进行键盘输入 android:gravity="right" //文字靠右边 android:layout_gravity="center" android:background="@drawable/white_bg"/> <!-- 设置输入框的背景,为一个xml文件 --> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" android:gravity="center_horizontal" android:orientation="horizontal" > <!-- 代表水平排布 --> <button android:id="@+id/btclear" android:background="@drawable/white_select" //设置按钮的背景,为一个xml文件 android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="c" /> <button android:id="@+id/btdel" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="del" /> <button android:id="@+id/btdivide" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="/" /> <button android:id="@+id/btmul" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="*" /> </linearlayout> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" android:gravity="center_horizontal" android:orientation="horizontal" > <button android:id="@+id/btseven" android:background="@drawable/white_select" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="7" /> <button android:id="@+id/bteight" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="8" /> <button android:id="@+id/btnine" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="9" /> <button android:id="@+id/btjian" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="-" /> </linearlayout> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" android:gravity="center_horizontal" android:orientation="horizontal" > <button android:id="@+id/btfour" android:background="@drawable/white_select" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="4" /> <button android:id="@+id/btfive" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="5" /> <button android:id="@+id/btsix" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="6" /> <button android:id="@+id/btjia" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="+" /> </linearlayout> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="5dp" android:gravity="center_horizontal" android:orientation="horizontal" > <linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <button android:id="@+id/btone" android:background="@drawable/white_select" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="1" /> <button android:id="@+id/bttwo" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="2" /> <button android:id="@+id/btthree" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="3" /> </linearlayout> <linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="5dp" android:orientation="horizontal" > <button android:id="@+id/btzero" android:background="@drawable/white_select" android:layout_width="155dp" android:layout_height="60dp" android:textsize="20sp" android:text="0" /> <button android:id="@+id/btpoint" android:background="@drawable/white_select" android:layout_marginleft="5dp" android:layout_width="75dp" android:layout_height="60dp" android:textsize="20sp" android:text="." /> </linearlayout> </linearlayout> <button android:layout_width="75dp" android:background="@drawable/orange_select" android:layout_height="125dp" android:text="=" android:layout_marginleft="5dp" android:textsize="20sp" android:gravity="center" android:id="@+id/btequ"> </button> </linearlayout> </linearlayout>
2.等号按钮和其余按钮的背景及点击效果不同。orange_select.xml页面是等号按钮的背景页面。
orange_select.xml页面:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/orange_bg" android:state_pressed="false"></item> <!-- 不点击时背景为orange_bg.xml页面的效果 --> <item android:drawable="@drawable/khaki_bg" android:state_pressed="true"></item> <!-- 点击时背景为khaki_bg.xml页面的效果 --> </selector>
3.orange_bg.xml页面:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp"/> <solid android:color="#ff9900"/> </shape>
4.khaki.xml页面:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp"/> <solid android:color="#cc6600"/> </shape>
5.white_select.xml页面是其余按钮的背景页面。
white_select页面:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/white_bg" android:state_pressed="false"></item> <item android:drawable="@drawable/gray_bg" android:state_pressed="true"></item> </selector>
6.white_bg.xml页面:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp"/> <solid android:color="#ffffff"/> </shape>
7.gray_bg.xml页面:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="5dp"/> <solid android:color="#cccccc"/> </shape>
8.mainactivity.java处理按钮的点击事件以及数值运算。
mainactivity.java页面:
package com.example.jisuanqi; import android.os.bundle; import android.app.activity; import android.util.log; import android.view.menu; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; public class mainactivity extends activity implements onclicklistener{ private edittext etinput; //实例输入框 private button btone; //实例所有按钮 private button bttwo; private button btthree; private button btfour; private button btfive; private button btsix; private button btseven; private button bteight; private button btnine; private button btzero; private button btpoint; private button btjia; private button btjian; private button btmul; private button btdivide; private button btequ; private button btclear; private button btdel; boolean clear_flag; //清空标识,当用户点击等号完成一次运算时进行清空 @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); etinput=(edittext) findviewbyid(r.id.etinput); //获取输入框的id btone=(button) findviewbyid(r.id.btone); //获取所有按钮的id bttwo=(button) findviewbyid(r.id.bttwo); btthree=(button) findviewbyid(r.id.btthree); btfour=(button) findviewbyid(r.id.btfour); btfive=(button) findviewbyid(r.id.btfive); btsix=(button) findviewbyid(r.id.btsix); btseven=(button) findviewbyid(r.id.btseven); bteight=(button) findviewbyid(r.id.bteight); btnine=(button) findviewbyid(r.id.btnine); btzero=(button) findviewbyid(r.id.btzero); btpoint=(button) findviewbyid(r.id.btpoint); btjia=(button) findviewbyid(r.id.btjia); btjian=(button) findviewbyid(r.id.btjian); btmul=(button) findviewbyid(r.id.btmul); btdivide=(button) findviewbyid(r.id.btdivide); btequ=(button) findviewbyid(r.id.btequ); btclear=(button) findviewbyid(r.id.btclear); btdel=(button) findviewbyid(r.id.btdel); btone.setonclicklistener(this); //设置点击事件,因为mainactivity已经实现了onclicklistener接口,所以只需要参数只需要传this bttwo.setonclicklistener(this); btthree.setonclicklistener(this); btfour.setonclicklistener(this); btfive.setonclicklistener(this); btsix.setonclicklistener(this); btseven.setonclicklistener(this); bteight.setonclicklistener(this); btnine.setonclicklistener(this); btzero.setonclicklistener(this); btpoint.setonclicklistener(this); btjia.setonclicklistener(this); btjian.setonclicklistener(this); btmul.setonclicklistener(this); btdivide.setonclicklistener(this); btequ.setonclicklistener(this); btclear.setonclicklistener(this); btdel.setonclicklistener(this); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; } @override public void onclick(view v) { // todo auto-generated method stub string etinput=etinput.gettext().tostring(); //获取输入框中的内容并转化为string类型 switch(v.getid()){ //判断点击按钮的id case r.id.btzero: case r.id.btone: case r.id.bttwo: case r.id.btthree: case r.id.btfour: case r.id.btfive: case r.id.btsix: case r.id.btseven: case r.id.bteight: case r.id.btnine: case r.id.btpoint: if(clear_flag){ clear_flag=false; etinput=""; etinput.settext(""); } etinput.settext(etinput+((button)v).gettext()); //点击数字和小数点直接显示内容 break; case r.id.btjia: case r.id.btjian: case r.id.btmul: case r.id.btdivide: if(clear_flag){ clear_flag=false; etinput=""; etinput.settext(""); //当clear_flag为true时进入if语句,并可以清空,代表用户点击了等于号完成一次运算,并使clear_flag变成了true } etinput.settext(etinput+" "+((button)v).gettext()+" "); //点击运算符也是直接显示,但是为了后边运算要在运算符两侧加上空格 break; case r.id.btdel: if(clear_flag){ clear_flag=false; etinput=""; etinput.settext(""); }else if(etinput!=null&&!etinput.equals("")){ etinput.settext(etinput.substring(0,etinput.length()-1)); //如果输入框内容不为空,则去掉最后一位 } break; case r.id.btclear: clear_flag=false; etinput=""; etinput.settext(""); //直接设置输入框为空 break; case r.id.btequ: getresult(); //点击等号调用getresult()方法 break; } } public void getresult(){ string exp=etinput.gettext().tostring(); //获取输入框的内容 if(exp==null||exp.equals("")){ return; } if(!exp.contains(" ")){ //判断输入框是否包含空格,也就是没有点击运算符 return; } if(clear_flag){ //点击等号clear_flag为true,当再点击别的数字或运算符时才会变为false,如果连续点击等号,则第二次点击无效,直接返回 clear_flag=false; return; } clear_flag=true; double result=0; string s1=exp.substring(0,exp.indexof(" ")); //运算符前面的字符串 string op=exp.substring(exp.indexof(" ")+1,exp.indexof(" ")+2); //运算符,是根据运算符前边的空格计算的 string s2=exp.substring(exp.indexof(" ")+3); //运算符后边的字符串 if(!s1.equals("")&&!s2.equals("")){ double d1=double.parsedouble(s1); //将字符串转换为double类型 double d2=double.parsedouble(s2); if(op.equals("+")){ result=d1+d2; }else if(op.equals("-")){ result=d1-d2; }else if(op.equals("*")){ result=d1*d2; }else if(op.equals("/")){ if(d2==0){ //判断除数为0的情况 result=0; }else{ result=d1/d2; } } if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("/")){ //如果两个数都是整形,那么结果就需要显示为整数 int r=(int)result; //将string型计算结果强制转换为整形 etinput.settext(r+""); }else{ etinput.settext(result+""); } }else if(!s1.equals("")&&s2.equals("")){ //如果用户输入一个数字就点击运算符,那么将不计算 etinput.settext(exp); }else if(s1.equals("")&&!s2.equals("")){ //如果一上来就点击运算符并输入第二个数,那么第一个数默认为0 double d2=double.parsedouble(s2); if(op.equals("+")){ result=0+d2; }else if(op.equals("-")){ result=0-d2; }else if(op.equals("*")){ result=0; }else if(op.equals("/")){ result=0; } if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("/")){ int r=(int)result; etinput.settext(r+""); }else{ etinput.settext(result+""); } }else{ etinput.settext(""); } } }
9.程序完成就可以运行了。因为是简易计算器,所以还不能进行连续的加减乘除。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: AMD Yes喊了三年 锐龙CPU真香了没?不吹不黑 用事实说话
下一篇: 出汗,真能治感冒吗?