热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidStudio实现简单计算器功能

这篇文章主要为大家详细介绍了AndroidStudio实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android Studio实现简单计算器功能的具体代码,供大家参考,具体内容如下

程序步骤:

(1)在布局文件定义一些计算器界面的文本框,按钮等组件。

(2)在Activity中获取组件实例。

(3)通过swtich函数,判断输入的内容,并进行相应操作,通过getText()获取文本内容,setText()显示。

程序代码设计:

一、界面布局

参考书本例2-9,应用网格布局设计计算器界面,在设计区域设置一个6行4列的网格布局,第一行为显示数据的文本标签,第二行为清除数据的按钮,即清空所有输入的数据,3-6行划分为均等的16个按钮,分别代表数字0-9,小数点,和运算符加减乘除以及等于号。界面效果图如下

布局文件activity_main.xml:

定义一些计算器界面的文本框,按钮等组件,因为要与控制文件MainActivity.java建立关联,所以每一个组件都需要设置id属性值。要注意的是,打开布局文件时,我一开始参照书本,把原来自动给出的抬头改了,导致界面只能出现文本标签和清除按钮,经过修改,我发现不能修改原来的抬头,直接在下面再设置网格布局。


 

 

 

二、设计控制文件MainActivity:

建立与程序中组件与用户界面程序组件的关联,并编写设计按钮的监听事件处理代码。点击数字和小数点按钮在文本标签输入并显示要计算的数字,点击运算符按钮获取前面的数字,放进num1,按=运算符时,获取前面的数字,再通过op判断操作数,进行加减乘除运算,输出结果。

关联用户界面:

public class MainActivity extends AppCompatActivity {
 
 private TextView txt; /*显示计算过程及结果*/
 private Button butp,but1,but2,but3,but4,but5,but6,but7,but8,but9,but0,buta,buts,butm,butdiv,butdopt,buteq;
 double num1=0,num2=0;
 double result=0; /*计算结果*/
 int op=0; /*判断操作数*/
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 txt=(TextView) findViewById(R.id.textView); /*与用户界面程序中组件建立关联*/
 butp=(Button)findViewById(R.id.butCancel); /*清除*/
 but1=(Button)findViewById(R.id.but_1); 
 but2=(Button)findViewById(R.id.but_2);
 but3=(Button)findViewById(R.id.but_3);
 but4=(Button)findViewById(R.id.but_4);
 but5=(Button)findViewById(R.id.but_5);
 but6=(Button)findViewById(R.id.but_6);
 but7=(Button)findViewById(R.id.but_7);
 but8=(Button)findViewById(R.id.but_8);
 but9=(Button)findViewById(R.id.but_9);
 but0=(Button)findViewById(R.id.but_0);
 buta=(Button)findViewById(R.id.but_add); /*加*/
 buts=(Button)findViewById(R.id.but_sub); /*减*/
 butm=(Button)findViewById(R.id.but_mut); /*乘*/
 butdiv=(Button)findViewById(R.id.but_div); /*除*/
 butdopt=(Button)findViewById(R.id.but_dopt); /*点*/
 buteq=(Button)findViewById(R.id.but_equ); /*等于*/
 
 
 butp.setOnClickListener(new mClick());
 but1.setOnClickListener(new mClick());
 but2.setOnClickListener(new mClick());
 but3.setOnClickListener(new mClick());
 but4.setOnClickListener(new mClick());
 but5.setOnClickListener(new mClick());
 but6.setOnClickListener(new mClick());
 but7.setOnClickListener(new mClick());
 but8.setOnClickListener(new mClick());
 but9.setOnClickListener(new mClick());
 but0.setOnClickListener(new mClick());
 buta.setOnClickListener(new mClick());
 buts.setOnClickListener(new mClick());
 butm.setOnClickListener(new mClick());
 butdiv.setOnClickListener(new mClick());
 butdopt.setOnClickListener(new mClick());
 buteq.setOnClickListener(new mClick());
 }

实现监听时间处理:

数字,小数点按键:

class mClick implements View.OnClickListener
 {
 public void onClick(View v) {
 
 switch(v.getId()){ /*用swtich()方法,判断点击按钮的id*/
 case R.id.butCancel: /*清除,直接将输入的所有符号清空*/
 txt.setText(null);
 break;
 /*数字,小数点按键*/
 case R.id.but_1:
 String str1=txt.getText().toString(); /*获取输入内容并转为string类型/
 str1+="1"; /*拼接字符串*/
 txt.setText(str1); /*显示输入内容*/
 break;
 case R.id.but_2:
 String str2=txt.getText().toString();
 str2+="2";
 txt.setText(str2);
 break;
 case R.id.but_3:
 String str3=txt.getText().toString();
 str3+="3";
 txt.setText(str3);
 break;
 case R.id.but_4:
 String str4=txt.getText().toString();
 str4+="4";
 txt.setText(str4);
 break;
 case R.id.but_5:
 String str5=txt.getText().toString();
 str5+="5";
 txt.setText(str5);
 break;
 case R.id.but_6:
 String str6=txt.getText().toString();
 str6+="6";
 txt.setText(str6);
 break;
 case R.id.but_7:
 String str7=txt.getText().toString();
 str7+="7";
 txt.setText(str7);
 break;
 case R.id.but_8:
 String str8=txt.getText().toString();
 str8+="8";
 txt.setText(str8);
 break;
 case R.id.but_9:
 String str9=txt.getText().toString();
 str9+="9";
 txt.setText(str9);
 break;
 case R.id.but_0:
 String strr=txt.getText().toString();
 strr+="0";
 txt.setText(strr);
 break;
 case R.id.but_dopt:
 String strd=txt.getText().toString();
 strd+=".";
 txt.setText(strd);
 break;

运算符按键:

/*运算符按键*/
 case R.id.but_add:
 String stradd=txt.getText().toString();/*按运算符,获取要计算的数字,并放入num1等待计算*/
 if(stradd.equals(null)) /*判断按运算符前是否输入要计算的数字,若为空,则返回*/
 {
 return;
 }
 num1=Double.valueOf(stradd);/*将获取的字符串转化为double类型以便计算*/
 txt.setText(null);
 op=1;
 break;
 case R.id.but_sub:
 String strsub=txt.getText().toString();
 if(strsub.equals(null))
 {
 return;
 }
 num1=Double.valueOf(strsub);
 txt.setText(null);
 op=2;
 break;
 case R.id.but_mut:
 String strmut=txt.getText().toString();
 if(strmut.equals(null))
 {
 return;
 }
 num1=Double.valueOf(strmut);
 txt.setText(null);
 op=3;
 break;
 case R.id.but_div:
 String strdiv=txt.getText().toString();
 if(strdiv.equals(null))
 {
 return;
 }
 num1=Double.valueOf(strdiv);
 txt.setText(null);
 op=4;
 break;

逻辑算法实现:虽然能进行简单的计算,但是因为把输入的数字放入num1和num2,进行计算,点击运算符只是获取符号前的数字,并不是显示运算符,所以我只是手动添加等式显示,即结果显示时只能显示两个数之间的加减乘除运算。

case R.id.but_equ:
 String strequ=txt.getText().toString();
 num2=Double.valueOf(strequ);
 txt.setText(null);
 switch (op){ /*用switch函数来判断进行何种操作,实施运算并得出结果*/
 case 1:
 result=num1+num2;
 txt.setText(String.valueOf(num1)+"+"+String.valueOf(num2)+"="+String.valueOf(result));/*获取结果并将其转为字符串输出*/
 break;
 case 2:
 result=num1-num2;
 txt.setText(String.valueOf(num1)+"-"+String.valueOf(num2)+"="+String.valueOf(result));
 break;
 case 3:
 result=num1*num2;
 txt.setText(String.valueOf(num1)+"*"+String.valueOf(num2)+"="+String.valueOf(result));
 break;
 case 4:
 if (num2==0){
 txt. setText("除数不能为0!"); /*规定除数不能为0,否则报错*/
 }else{
 result=num1/num2;
 txt.setText(String.valueOf(num1)+"/"+String.valueOf(num2)+"="+String.valueOf(result));}
 break;
 default:
 result=0;
 break;
 }

三、运行结果

在编写这个计算器代码的过程中,收获了很多,对Android Studio的布局有了更多的认识,对它的操作也熟练了很多,也学会了怎样可以更快速,便捷地进行代码编写,在实践中学习,即使这次的代码还有很多要改进,修改的地方。

更多计算器功能实现,请点击专题: 计算器功能汇总 进行学习

关于Android计算器功能的实现,查看专题:Android计算器 进行学习。

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


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
author-avatar
sundy柳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有