Android Studio实现简单计算器功能
作者:c77777_ 发布时间:2023-10-17 03:54:42
本文实例为大家分享了Android Studio实现简单计算器功能的具体代码,供大家参考,具体内容如下
程序步骤:
(1)在布局文件定义一些计算器界面的文本框,按钮等组件。
(2)在Activity中获取组件实例。
(3)通过swtich函数,判断输入的内容,并进行相应操作,通过getText()获取文本内容,setText()显示。
程序代码设计:
一、界面布局
参考书本例2-9,应用网格布局设计计算器界面,在设计区域设置一个6行4列的网格布局,第一行为显示数据的文本标签,第二行为清除数据的按钮,即清空所有输入的数据,3-6行划分为均等的16个按钮,分别代表数字0-9,小数点,和运算符加减乘除以及等于号。界面效果图如下
布局文件activity_main.xml:
定义一些计算器界面的文本框,按钮等组件,因为要与控制文件MainActivity.java建立关联,所以每一个组件都需要设置id属性值。要注意的是,打开布局文件时,我一开始参照书本,把原来自动给出的抬头改了,导致界面只能出现文本标签和清除按钮,经过修改,我发现不能修改原来的抬头,直接在下面再设置网格布局。
<!-- 设置一个网格布局,网格为6行4列-->
<GridLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnCount="4" //设置网格列数
android:rowCount="6" //设置网格行数
tools:layout_editor_absoluteX="73dp"
tools:layout_editor_absoluteY="294dp">
<!--第一行-->
<TextView
android:id="@+id/textView" //设置id属性值
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnSpan="4" //该组件占据4列的位置
android:textSize="26sp" />
<!--第二行-->
<Button
android:id="@+id/butCancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:text="清除"
android:textSize="26sp" />
<Button
android:id="@+id/but_1"
android:text="1"
android:textSize="26sp" />
<Button
android:id="@+id/but_2"
android:text="2"
android:textSize="26sp" />
<Button
android:id="@+id/but_3"
android:text="3"
android:textSize="26sp" />
<Button
android:id="@+id/but_add"
android:text="+"
android:textSize="26sp" />
<Button
android:id="@+id/but_4"
android:text="4"
android:textSize="26sp" />
<Button
android:id="@+id/but_5"
android:text="5"
android:textSize="26sp" />
<Button
android:id="@+id/but_6"
android:text="6"
android:textSize="26sp" />
<Button
android:id="@+id/but_sub"
android:text="-"
android:textSize="26sp" />
<Button
android:id="@+id/but_7"
android:text="7"
android:textSize="26sp" />
<Button
android:id="@+id/but_8"
android:text="8"
android:textSize="26sp" />
<Button
android:id="@+id/but_9"
android:text="9"
android:textSize="26sp" />
<Button
android:id="@+id/but_mut"
android:text="*"
android:textSize="26sp" />
<Button
android:id="@+id/but_dopt"
android:text="."
android:textSize="26sp" />
<Button
android:id="@+id/but_0"
android:text="0"
android:textSize="26sp" />
<Button
android:id="@+id/but_equ"
android:text="="
android:textSize="26sp" />
<Button
android:id="@+id/but_div"
android:text="/"
android:textSize="26sp" />
</GridLayout>
二、设计控制文件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计算器 进行学习。
来源:https://blog.csdn.net/c77777_/article/details/88619579


猜你喜欢
- Handler每个初学Android开发的都绕不开Handler这个“坎”,为什么说是个坎呢,首先这是Android架构的精髓之一,其次大部
- 背景工作中遇到业务诉求是通过OpenCV对图片进行一些判断操作和优化,这里是看了部分不错的文章,希望总结一个自己的学习过程,温故而知新,有不
- 一,使用背景之前遇到一个需求,是需要将一个json文件解析存储到数据库中。一开始测试的时候,json文件的大小都在几兆以内,所以直接将jso
- 本文实例讲述了C#读取文本文件到listbox组件的方法。分享给大家供大家参考。具体实现方法如下:private void AddTxtTo
- 我们经常会有这种场景,只需要把Spring Boot打成普通的jar包,不包含配置文件,供其他程序应用本文介绍如何使用Maven将Sprin
- request对象是什么?Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。
- 1.情景展示静态方法内部实现:将指定内容生成图片格式的二维码;如何通过多线程实现?2.分析之所以采用多线程,是为了节省时间 3.解
- 如下所示:import java.util.Scanner;public class Main{public static void mai
- 导入maven项目各个注解均报错所遇问题导入maven项目各个注解均报错了思考1:这个项目使用了springboot;spring是个”大容
- 本文实例讲述了Java实现的日历功能。分享给大家供大家参考,具体如下:应用名称:Java日历用到的知识:Java GUI编程,日期操作开发环
- 概述一天之计在于晨,每天的早餐也是必不可少,但是很多人为了节约时间,都是简单的吃点凑合一下或干脆不吃早餐,这对于个人身体和工作效率来说,无疑
- 本文主要介绍了spring-boot-maven-plugin报红解决方案,亲测有效,具体如下:<?xml version="
- 为方便自己以后学习,自己记录学习,大家也可以参考,有什么问题一起探讨。今天学习RecyclerView,下边来说一下实现数据垂直滚动和数据横
- 本文以实例介绍了C#如何通过winmm.dll来播放声音,主要实现步骤如下:1.首先导入如下两个函数:/// <summary>
- 下面给大家介绍几种比较常见的解决办法,具体内容如下:1.有时候eclipse不自动编译,把project clean一下,让R.java重新
- 此项目使用了OpenCVSharp加载本地摄像头,多个摄像头支持切换展示,也可以展示rtsp地址。使用NuGet如下:代码如下一、创建Mai
- 以下内容通过1、实现目标注入程序,2、实现主程序,3、实现注入函数,4、thumb指令集实现等4个方面详细分析了android中inline
- 这几天对Android中实现画圆弧及圆弧效果中所实现的效果进行了修改,改为进度圆心进度条,效果如图所示TasksCompletedView.
- springboot整合redis主从sentinel一主二从三sentinel配置1、master:127.0.0.1:63792、sla
- 目录1. 应用场景1.1. 保障线程安全1.2. 显示传递参数2. 实现原理3. 注意事项ThreadLocal是线程私有的局部变量存储容器