欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现简易计算器小程序

程序员文章站 2023-10-22 18:16:46
本文实例为大家分享了android实现简易计算器小程序的具体代码,供大家参考,具体内容如下 目标效果:   通过编写代码,可以实现整数和小数的加减乘除运算,...

本文实例为大家分享了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.程序完成就可以运行了。因为是简易计算器,所以还不能进行连续的加减乘除。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。