

基于Andriod的简易计算器
source link: http://www.cnblogs.com/p1ng/p/12634770.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

这学期有安卓这门课,这里做了一个简易的计算器,实现了两位数加减乘除的基本功能,比较简单适合用来入门学习。
运行效果
预备知识
实现这个计算器之前要先了解实现计算器需要的基本组件
1.TextView
TextView是一个文本显示组件,提供了基本的显示文本功能,因为大多数UI系统组件都需要展示信息,所有它也是大多数UI系统组件的父类。
(1)TextView的常用属性和方法
属性名 对应方法 说明 android:autoLink setAutoLinkMask(int) 设置是否当文本为:URL链接、E-mail、电话号码、Map时,文本显示为可单机的链接 android:gravity setGravity(int) 设置文本框的对应方式 android:layout_gravity 设置组件本身相对于父组件的显示位置 android:lines setLines(int) 设置文本的行数,设置两行就显示两行,即使第二行没有数据 android:text setText(CharSequence) 设置文本框显示的文本内容 android:textColor setTextColor(int) 设置文本显示的颜色 android:textSize setTextSize(float) 设置文字大小,推荐度量单位"sp" android:textStyle setTypeface(Typeface) 设置字形:粗体、斜体等 android:layout_width 设置文本框在屏幕上的宽度 android:layout_height 设置文本框在屏幕上的高度(2)gravity和layout_gravity的属性值及说明
属性值 说明 top 顶部对齐 bottom 底部对齐 left 左边对齐 right 右边对齐 center_horizontal 横向中央位置对齐2.Button
Button是TextView的子类,所以TextView上很多属性也可以直接应用到Button上。实际开发中对于Button操作主要是按下后执行何种操作。
(1)Button的常用属性和方法
属性名 对应方法 说明 android:clickable setClickable(boolean) 设置是否允许点击按钮(true/false) android:background setBackgroudResource 通过资源文件设置背景色 android:onClick setOnClickListener(OnClickListener) 设置点击事件(2)监听事件
每一个添加到UI上的Button一般都需要给它绑定监听事件,给Button绑定监听事件通常有两类方法:
- 内部类(匿名内部类、定义内部类)
- 给Button设置onClick属性(在代码中定义onClick指明的对应方法)
了解完了组件之后还要了解一个布局,才能将组件更好的摆放在界面上。此计算器使用线性布局实现的。
3.LinerLayout
线性布局是Android应用程序开发时较为常见的一种布局类型,它可以将用户界面上的组件拜访水平(horizontal)或垂直(vertical)的形式。
LinerLayout的常用属性和对应方法
属性名 对应方法 说明 android:orientation setOrientation(int) 设置线性布局的方向,有horizontal(水平)和vertical(垂直)两个值,必须设置 android:layout_gravity 设置组件本身相对于父组件的显示位置 android:divider 设置分割线的图片 android:layout_weight 设置权重,即让一行或一列的组件按比例显示计算器的具体设计与实现
一、主界面设计
根据运行效果可以看出,计算器主要实现了加、减、乘、除的计算功能。
- 主界面上用11个Button组件显示数字0 9和".",用于输入0 9数字和小数点;
- 用4个Button组件显示"+"、""、""、""运算符,用于实现加、减、乘、除运算;
- 用3个Button组件显示"="、"C" 和 "DEL", "=" 用于计算结果、 "C" 用于将显示结果的TextView清零、 "DEL" 用于删除输入的1个字符。
采用嵌套的线性布局
具体结构如下:
整体是一个垂直的线性布局,最上面放置一个TextView,下面是五个水平的线性布局用来放置按钮。
按钮的宽度是用weight权重设置而成,让观感更好。
最外层的线性布局添加了属性 android:layout_margin="8dp"
让布局与边框有了8dp的间隔,也是使观感更好。
二、实例化对象与监听事件
- 实例化组件对象
- 创建init函数, 将TextView以及功能性组件通过
this.findViewById(R.id.具体id)
进行实例化。
- 给对象绑定监听事件
- 内部类
* 匿名内部类
* 定义内部类 - onClick属性
* 定义public类型的方法
数字按键的功能只是显示到TextView中所以使用的是添加onClick属性并指定方法绑定监听事件,功能按键使用的是匿名内部类定义其功能。
三、功能的实现
(1)定义变量和初始化组件
private Button btnAdd, btnDec, btnMul, btnDev, btnEqu, btnClear, btnDel; private TextView txtResult; //显示结果 private StringBuffer digtalA = new StringBuffer(),digtalB = new StringBuffer(); private boolean isChar = false; //是否为运算符 private int operater = 0; // 判断是哪种运算符 0+ 1- 2* 3/ private boolean isDigtalA = true; void initView(){ txtResult = (TextView) this.findViewById(R.id.txtResults); btnAdd = (Button) this.findViewById(R.id.btnAdd); btnDec = (Button) this.findViewById(R.id.btnDec); btnMul = (Button) this.findViewById(R.id.btnMul); btnDev = (Button) this.findViewById(R.id.btnDev); btnEqu = (Button) this.findViewById(R.id.btnEqu); btnClear = (Button) this.findViewById(R.id.btnC); btnDel = (Button) this.findViewById(R.id.btnDel); }
(2)数字0~9及小数点的监听事件定义了myOnclick()方法来实现
public void myOnclick(View v){ switch (v.getId()){ case R.id.btn0: setVal("0"); break; case R.id.btn1: setVal("1"); break; //...中间代码省略 case R.id.btnDot: setVal("."); break; } }
setVal()方法是对重复代码的抽取。
public void setVal(String s){ if (isChar){ digtalB.append(s); txtResult.setText(digtalB.toString()); }else{ digtalA.append(s); txtResult.setText(digtalA.toString()); } }
此代码作用是判断当前输入的数字是运算的第一个数还是第二个数。对其进行赋值(digtalA为StringBuffer存储第一个运算数,B存储第二个运算数)并显示到TextView中。
(3)运算法"+"的监听事件
btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (digtalA.length() == 0){ return; } operater = 0; isChar = true; isDigtalA = false; txtResult.setText("+"); } });
减乘除与其类似。
(4)清空按钮 "C" 的监听事件
btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { digtalA = new StringBuffer(); digtalB = new StringBuffer(); isChar = false; isDigtalA = true; txtResult.setText("0"); } });
(5)等于号 "=" 的监听事件
btnEqu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (digtalA.length() == 0 || digtalB.length() == 0){ return; } float a = Float.parseFloat(digtalA.toString()); float b = Float.parseFloat(digtalB.toString()); float c = 0; switch (operater){ case 0: c = a + b; break; case 1: c = a - b; break; case 2: c = a * b; break; case 3: c = a / b; break; } txtResult.setText(c+""); digtalA = new StringBuffer(); digtalB = new StringBuffer(); isChar = false; isDigtalA = true; } }); }
先判断两个运算数是否为空,为空直接返回,再进行相应的加减乘除操作,将结果显示到屏幕中,并清空A,B及其他标识符。
(6)退格删除 "DEL" 的监听事件
btnDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isDigtalA){ if (digtalA.length() > 0){ String temp = digtalA.substring(0,digtalA.length()-1); digtalA = new StringBuffer(); digtalA.append(temp); txtResult.setText(digtalA.toString()); }else{ digtalA = new StringBuffer(); digtalA.append("0"); } }else{ if (digtalB.length() > 0){ String temp = digtalB.substring(0,digtalB.length()-1); digtalB = new StringBuffer(); digtalB.append(temp); txtResult.setText(digtalB.toString()); }else{ digtalB = new StringBuffer(); digtalB.append("0"); } } } });
isDigtalA 是用来判断当前输入数字是第一个运算数还是第二个,退格用StringBuffer的substring截断最后一位数字。
(7)其他说明
单位 说明 px(像素) 相当于实际屏幕的像素,由于不同屏幕的像素数差异比较大,因此这个单位不推荐用于尺寸单位 dp/dip(密度无关像素) 一种与屏幕密度无关的尺寸单位,当屏幕密度是160dpi时,1dp=1px。当运行在高dpi的屏幕上时,dp就会按比例放大,当运行在低dpi的屏幕上时,dp就会按比例缩小。因此dp是一种简单解决view在不同大小屏幕上显示问题的解决方案 sp 与dp相似,但是它会随着用户对系统字体大小的设置进行比例缩放,即它能够跟随用户系统字体大小变化。所以它更适合作为字体大小的单位Recommend
-
138
问与答 - @iamet - 刚从 iPhone 转到 andriod,唯一不习惯的就是各种收不到消息。由于工作原因,要保持 Outlook,whatsapp,Skype 在线接收邮件和信息,虽然我在应用权限那里设置了各种权限
-
54
iPhone - @xiaoxianyu - 手上在用 iPhone6s Plus,已经用了 3 年,home 键彻底坏掉,各类软件打开时也卡得不行(莫非是我打开姿势有问题?),兴冲冲的想在这次发布会后换手机,但是看完我的心就凉凉了,好贵好贵好贵
-
107
1、OkHttp 的基本使用 OkHttp 是 Square 的一款应用于 Android 和 Java 的 Http 和 Http/2 客户端。使用的时候只需要在 Gradle 里面加入下面一行依赖即可引入: implementation 'com.squa
-
50
前言 很多时候Android应用需要每间隔一段时间向服务器请求数据,如果服务器数据有更新则通知界面变化。Android中最常用的红点一般采用的就是轮询,红点是为了在数据有更新时及时的提醒用户,比如朋友圈更新,当用户的朋友圈更新时就会显示红点,就是通过移动端不断...
-
46
背景 前端架构师使用angular JS作为框架,打包android APK。 程序已经完成,需要使用自动编译功能来检测服务。 问题 问题一:JDK需要使用1.8,其他版本目前不支持。 问题二:android-sd...
-
7
前端 JavaScript 实现一个简易计算器 前端使用 JavaScript 实现一个简易计算器,没有难度,但是里面有些小知识还是需要注意的,算是一次基础知识回顾吧。
-
2
利用Java制作简易计算器 - OSCHINA - 中文开源技术交流社区 majiajue 今天 10:39 ...
-
8
本文分享自华为云社区《手把手教你使用 Java AWT 创建一个简易计算器》,作者:海拥 。 关于AWT AWT (抽象窗口工具包)是一个有助于构建 G...
-
5
HarmonyOS - 实现简易的计算器-51CTO.COM HarmonyOS - 实现简易的计算器 作者:张前霞 2022-07-11 16:19:22 作为FA初学者,拿来练练手,重点是熟悉其中一些语法的使用,以及css属性...
-
6
C语言简易计算器的两种方法 精选 原创 海绵饱饱q 2023-01-03 23:24:54...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK