一、内容

基于AndroidStudio,实现一个简易的计算器(界面+简单的计算)。

下图是整体界面:

二、思路

  1. 首先设计界面,activity_main.xml

计算器界面,需要:文本框TextView——显示数字;数字、符号按钮Button

<?xml version="1.0" encoding="utf-8"?>
<GridLayout  xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:rowCount="6"android:columnCount="4"><!--文本标签--><TextViewandroid:id="@+id/text"android:layout_width="350dp"android:layout_height="wrap_content"android:layout_columnSpan="4"android:layout_marginLeft="4px"android:gravity="left"android:textSize="50dp" /><Buttonandroid:id="@+id/btnClear"android:layout_width="353dp"android:layout_height="wrap_content"android:layout_columnSpan="4"android:background="@color/colorAccent"android:text="清除"android:textSize="26sp" /><Buttonandroid:id="@+id/btn1"android:text="1"android:textSize="26sp" /><Buttonandroid:id="@+id/btn2"android:text="2"android:textSize="26sp" /><Buttonandroid:id="@+id/btn3"android:text="3"android:textSize="26sp" /><Buttonandroid:id="@+id/btnPlus"android:background="@color/colorPrimary"android:text="+"android:textSize="26sp" /><Buttonandroid:id="@+id/btn4"android:text="4"android:textSize="26sp" /><Buttonandroid:id="@+id/btn5"android:text="5"android:textSize="26sp" /><Buttonandroid:id="@+id/btn6"android:text="6"android:textSize="26sp" /><Buttonandroid:id="@+id/btnSubtract"android:background="@color/colorPrimary"android:text="-"android:textSize="26sp" /><Buttonandroid:id="@+id/btn7"android:text="7"android:textSize="26sp" /><Buttonandroid:id="@+id/btn8"android:text="8"android:textSize="26sp" /><Buttonandroid:id="@+id/btn9"android:text="9"android:textSize="26sp" /><Buttonandroid:id="@+id/btnMultiply"android:background="@color/colorPrimary"android:text="*"android:textSize="26sp" /><Buttonandroid:id="@+id/btnPoint"android:text="."android:textSize="26sp" /><Buttonandroid:id="@+id/btn0"android:text="0"android:textSize="26sp" /><Buttonandroid:id="@+id/btnSum"android:text="="android:textSize="26sp" /><Buttonandroid:id="@+id/btnDivide"android:background="@color/colorPrimary"android:text="/"android:textSize="26sp" />
</GridLayout>

2.接下来是功能的实现,MainActivity.java

给各个按钮注册点击事件、对输入内容的判断和计算等。

package com.example.asus.calculator;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;public class MainActivity extends AppCompatActivity implements View.OnClickListener {Button btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btnClear,btnPlus,btnSubtract,btnMultiply,btnDivide,btnSum,btnPoint;TextView text;String str = "";boolean clr_flag;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn0 = (Button) findViewById(R.id.btn0);btn1 = (Button) findViewById(R.id.btn1);btn2 = (Button) findViewById(R.id.btn2);btn3 = (Button) findViewById(R.id.btn3);btn4 = (Button) findViewById(R.id.btn4);btn5 = (Button) findViewById(R.id.btn5);btn6 = (Button) findViewById(R.id.btn6);btn7 = (Button) findViewById(R.id.btn7);btn8 = (Button) findViewById(R.id.btn8);btn9 = (Button) findViewById(R.id.btn9);btnClear = (Button) findViewById(R.id.btnClear);btnPlus = (Button) findViewById(R.id.btnPlus);btnSubtract = (Button) findViewById(R.id.btnSubtract);btnMultiply = (Button) findViewById(R.id.btnMultiply);btnDivide = (Button) findViewById(R.id.btnDivide);btnPoint = (Button) findViewById(R.id.btnPoint);btnSum = (Button) findViewById(R.id.btnSum);text = (TextView) findViewById(R.id.text) ;btn0.setOnClickListener(this);btn1.setOnClickListener(this);btn2.setOnClickListener(this);btn3.setOnClickListener(this);btn4.setOnClickListener(this);btn5.setOnClickListener(this);btn6.setOnClickListener(this);btn7.setOnClickListener(this);btn8.setOnClickListener(this);btn9.setOnClickListener(this);btnClear.setOnClickListener(this);btnPlus.setOnClickListener(this);btnSubtract.setOnClickListener(this);btnMultiply.setOnClickListener(this);btnDivide.setOnClickListener(this);btnPoint.setOnClickListener(this);btnSum.setOnClickListener(new click());}public void onClick(View v) {String input=text.getText().toString();switch (v.getId()){case   R.id.btn0:case   R.id.btn1:case   R.id.btn2:case   R.id.btn3:case   R.id.btn4:case   R.id.btn5:case   R.id.btn6:case   R.id.btn7:case   R.id.btn8:case   R.id.btn9:case   R.id.btnPoint:if(clr_flag){clr_flag=false;str="";text.setText("");}text.setText(input+((Button)v).getText());break;case R.id.btnPlus:case R.id.btnSubtract:case R.id.btnMultiply:case R.id.btnDivide:if(clr_flag){clr_flag=false;input="";text.setText("");}text.setText(input + " " + ((Button)v).getText() + " ");break;case R.id.btnClear:text.setText("");break;}}class click implements OnClickListener{public void onClick (View v) {getResult();//调用方法,计算结果}}private void getResult () {String str1 = text.getText().toString();if(str1 == null || str1.equals("")){return;}if(!str1.contains(" ")){return ;}if(clr_flag){clr_flag=false;return;}clr_flag=true;double result = 0;
//        运算符前的数字String s1 = str1.substring(0,str1.indexOf(" "));
//        运算符String op = str1.substring(str1.indexOf(" ")+1,str1.indexOf(" ")+2);
//        运算符后的数字String s2 = str1.substring(str1.indexOf(" ")+3);
//        判断
//        1. 如果s1、s2都不为空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) { //如果被除数是0result = 0; //则结果是0}else {//否则执行正常是除法运算result = d1 / d2;}}if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {//如果是整数类型int r = (int) result; //都是整形text.setText(str1 + " = " + r + "");} else{text.setText(str1 + " = " + result + "");}}
//            如果s1不是空,s2是空else if(!s1.equals("")&&s2.equals("")){double d1 = Double.parseDouble(s1);if (op.equals("+")){result = d1;}if (op.equals("-")) {result = d1;}if (op.equals("*")) {result = 0;}if (op.equals("/")) {result = 0;}if(!s1.contains(".")) {int res = (int) result;text.setText(str1 + " = " + res+"");}else {text.setText(str1 + " = " + result+"");}}
//        如果s1是空,s2不是空else if(s1.equals("")&& !s2.equals("")){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(".")){int res = (int) result;text.setText(str1 + " = " + res + "");}else{text.setText(str1 + " = " + result + "");}}else{text.setText("");}}
}

三、效果展示

1.加法:从左到右,分别为包括①小数点运算、②运算符前不为空,后为空、③运算符前为空,后不为空三种情况,均能实现运算。

      

2.减法:从左到右,分别为包括①小数点运算、②运算符前不为空,后为空、③运算符前为空,后不为空三种情况,均能实现运算。

      

3.乘法:从左到右,分别为包括①小数点运算、②运算符前不为空,后为空、③运算符前为空,后不为空三种情况,均能实现运算。(注:字符串为空,则认为是0)

      

4.除法:从左到右,分别为包括①小数点运算、②运算符前不为空,后为空、③运算符前为空,后不为空三种情况,均能实现运算。

      

四、总结

在计算器的案例中,页面设计、布局等都是很基础的知识,主要要解决的问题在于对输入内容的分割,以及对分割后的字符的逻辑运算。作为一个简易的计算器,我只实现了简单的单个运算符的运算。更精细的计算器,可以通过队列和栈实现运算优先级,即包括”(“、”)”,以及多个运算符共同计算的功能。

只有自己真正完成过项目,才能明白平时使用的这些APP,都是设计者们花费了多大的心思才能一步步完善,最后呈现在我们眼前的。向每一位程序员们致敬!

安卓AndroidStudio实现计算器相关推荐

  1. android dpi计算器,安卓多功能计算器 One++ Calculator 1.7.5 中文多语免费版

    安卓多功能计算器 One++ Calculator 中文解锁版由大眼仔~旭(www.dayanzai.me)发布.One++ Calculator 不是普通的计算器,而是数字公式计算的集合.现在市面上 ...

  2. android角度计算器,Calckit高级版一款安卓多功能计算器,内置高度定制的科学计算器...

    前言 手机中的计算器功能你多久用一次呢,我相信对于多数人来说计算器是一个低频使用软件. 其原因可能是用不上计算功能也很可能是单一的计算功能并不能满足你对于计算的需求. 那么如果现在有一款可以完成中学到 ...

  3. 苹果和安卓手机的计算器,为什么1÷3×3的结果不等于1?

    这样的问题在前几年的时候就有所讨论,那个时候都是在纠结苹果手机还是安卓手机的计算器更好用,于是大家在无意当中发现了好多的bug,其中就有这个. 当初我看到的时候也是非常的不解,因为这太让人失望了.这属 ...

  4. java编写安卓计算器_安卓实现简单计算器

    实现一个计算器 ,有加减乘除功能,小数点和清除操作. 这是学校安卓老师布置的作业,计算器说实话实现起来挺多坑的,之前在算法比赛中见过这种题,用来熟悉安卓的布局的确是挺好的一个小案例,不过需要挺多逻辑处 ...

  5. 安卓AndroidStudio大学生交友聊天社交app设计

    开发软件:Eclipse/Idea + AndroidStudio/Eclipse + Mysql 这是一个基于安卓的大学生交友社交论坛app,一共3个身份,包括老师.学生和管理员,其中老师和学生在手 ...

  6. 基于安卓AndroidStudio智慧医疗医院预约挂号app设计

    开发软件:AndroidStudio + sqlite数据库 利用原生安卓开发的一个医院管理app,包括了病人注册登录,填写流行病学调查表,预约核酸检查,查询核酸检查预约记录,预约新冠疫苗,查询疫苗预 ...

  7. 自制安卓版iPhone计算器

    新手初学安卓一周,勿喷. 在看完Activity之后决定做一个计算器.根据网上的资料和慕课网计算器的教材,仿照着做了一个iPone计算器. 先看看效果图 好了,直接给源码,XML用的是LinearLa ...

  8. AndroidStudio简单计算器的实现

    项目简介 首先此项目是本人学校安卓开发的一次作业,用Android Studio开发一个简单的计算器,这个计算器正常的功能为带括号的加减乘除多项式计算! 界面展示 废话不多说先展示一下界面!(模仿了小 ...

  9. 安卓androidstudio访问本地接口_安卓开发之数据存储在本地的四种方式

    ​ 安卓开发之数据存储在本地的四种方式 本地数据存储,在安卓开发过程中是不可避免的一个话题.这些本地的数据可能是用户的设置,程序的设置,用户的数据图片, 也可能是网络传输的一些缓冲数据. 基本上我们有 ...

最新文章

  1. Vue SPA 打包优化实践
  2. js复制功能的有效方法总结新
  3. servlet第2讲(下集)----创建servlet实例(继承HttpServlet)
  4. Windows内核实验001 中断提权
  5. CSS选择器的权重与优先规则
  6. SpringBoot 过滤器、拦截器、监听器对比及使用场景!
  7. 自动驾驶模拟器Carla之python编程-(3)获取汽车摄像头数据
  8. 罗马尼亚:曾经的黑客避风港变身全球安全人才的摇篮
  9. PHP常用函数性能对比
  10. 什么是数据库管理系统?
  11. 微信小程序下拉刷新在真机上不回缩问题的解决方法
  12. Datawhale组队学习周报(第031周)
  13. opencc对文档的繁体中文转换为简体
  14. .x3m勒索病毒怎么处理 phobos勒索病毒恢复成功 百分百解密sql文件恢复
  15. python 保存图片
  16. QGIS二次开发:鼠标在地图上移动时,状态栏显示鼠标所在位置经纬度
  17. 七大步教你征服丈母娘
  18. php编写个人所得税单元测试,PHP计算个人所得税示例【不使用速算扣除数】
  19. 如何在网页端登录企业邮箱修改密码?
  20. 智能工厂——实现智能制造的关键要素之一

热门文章

  1. 利用HOOK API做进程保护器
  2. 秘鲁庆祝亚马逊河被评选为世界自然奇观十周年纪念日
  3. 盒马与淄博布局重仓数字农业探索乡村振兴新样本
  4. 【CCF会议期刊推荐】中国计算机协会(CCF)推荐计算领域高质量科技期刊分级目录(T3类)
  5. php 文本数不自动换行,解决留言板中文自动换行,纯数字或英文字母不换行问题...
  6. c语言如何统计输赢次数,C语言模拟掼蛋中一方最多炸弹数的数学期望
  7. 基于ssm框架的汽车配件管理系统
  8. 探讨Java中最常见的十道面试题(超经典)
  9. 二进制位运算---左移(<<)右移(>>)
  10. 短路与和逻辑与、短路或||和逻辑或|的区别