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

布局(activity_main.xml)

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/GridLayout1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:columnCount="4"

android:orientation="horizontal"

android:rowCount="6" >

android:id="@+id/editText"

android:layout_columnSpan="4"

android:layout_gravity="fill"

android:layout_marginLeft="5dp"

android:layout_marginRight="5dp"

android:text="0"

android:textSize="50sp" />

android:id="@+id/clear"

android:layout_columnSpan="1"

android:layout_gravity="fill"

android:text="清空"

android:textColor="#FF4500"

/>

android:id="@+id/back"

android:layout_columnSpan="1"

android:layout_gravity="fill"

android:text="回退"

android:textColor="#FF4500"

/>

android:id="@+id/per"

android:text="%"

android:textColor="#FF4500"

/>

android:id="@+id/div"

android:text="÷"

android:textColor="#FF4500"

/>

android:id="@+id/b7"

android:text="7"

/>

android:id="@+id/b8"

android:text="8"

/>

android:id="@+id/b9"

android:text="9"

/>

android:id="@+id/mul"

android:text="×"

android:textColor="#FF4500"

/>

android:id="@+id/b4"

android:text="4"

/>

android:id="@+id/b5"

android:text="5"

/>

android:id="@+id/b6"

android:text="6"

/>

android:id="@+id/sub"

android:text="-"

android:textColor="#FF4500"

/>

android:id="@+id/b1"

android:text="1"

/>

android:id="@+id/b2"

android:text="2"

/>

android:id="@+id/b3"

android:text="3"

/>

android:id="@+id/plus"

android:layout_width="wrap_content"

android:text="+"

android:textColor="#FF4500"

/>

android:id="@+id/b00"

android:text="00"

/>

android:id="@+id/b0"

android:text="0"

/>

android:id="@+id/dot"

android:text="."

/>

android:id="@+id/equ"

android:text="="

android:background="#008B8B"

/>

响应及计算(MainActivity)

package com.mylayout;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private EditText editText;

//数字0-9

private Button b1;

private Button b2;

private Button b3;

private Button b4;

private Button b5;

private Button b6;

private Button b7;

private Button b8;

private Button b9;

private Button b0;

private Button b00;

//运算符

private Button per;

private Button add;// +

private Button sub; // -

private Button mul; // *

private Button div; // /

private Button dot; //小数点

private Button equ; // =

private boolean back; //退格

private boolean clear_bool= true;//清空

private boolean dot_flag1 = true;

private boolean dot_flag2 = true;

@Override

public void onClick(View view) {

String input = editText.getText().toString();

switch (view.getId()){

case R.id.b0:

case R.id.b1:

case R.id.b2:

case R.id.b3:

case R.id.b4:

case R.id.b5:

case R.id.b6:

case R.id.b7:

case R.id.b8:

case R.id.b9:

case R.id.b00:

if(dot_flag1)dot_flag2 = true;

if(clear_bool)

{

clear_bool = false;

editText.setText(""+((Button)view).getText());

}

else

{

editText.setText(input + ((Button)view).getText());//结果集就为本身

}

break;

case R.id.dot:

if(dot_flag1&&dot_flag2)

{

dot_flag1 = false;

dot_flag2 = false;

editText.setText(input + ((Button)view).getText());

}

break;

case R.id.per:

case R.id.plus:

case R.id.sub:

case R.id.mul:

case R.id.div:

dot_flag1 = true;

if(clear_bool)

{

clear_bool = false;

input = "";

editText.setText("");

}

editText.setText(input + ((Button)view).getText()+" ");

break;

case R.id.back: //退格

if(input != null || !input.equals("")) {

if(input.length()>1) {

editText.setText(input.substring(0, input.length() - 1));//

}

else{

clear_bool =true;

editText.setText("0");

}

}

break;

case R.id.clear: //清空

editText.setText("0");

clear_bool = true;

break;

case R.id.equ:

calculation();

break;

}

}

//计算结果

private void calculation() {

String s1 = editText.getText().toString(); //获取字符串

if (s1 == null){

return;

}

boolean flag = false;

if(s1.charAt(0)=='-')

{

s1 = s1.substring(1);

flag = true;

}

String []num = s1.split("[-÷×+]"); //分割字符串获得各个数字

double []n = new double[num.length];

for(int i=0;i

{

if(num[i].equals(""))continue;

//百分号

else if(num[i].contains("%")) n[i] = Double.parseDouble(num[i].replace("%",""))/100;

//开根

// else if(num[i].contains("√")) n[i] = Math.sqrt(Double.parseDouble(num[i].replace("√", "")));

else n[i] = Double.parseDouble(num[i]);

}

if(flag) n[0] -= n[0]*2; //负数情况

char[] sy = s1.replaceAll("[^-÷×+]","").toCharArray(); //获得运算符

int slen = sy.length;

if(sy.length == num.length)slen--;

char c = '+';

double result = n[0] ; //结果

if(n.length>1)

{

for (int j = 0; j < slen; j++) //先算乘除

{

if (sy[j] == '×')

{

n[j + 1] = n[j] * n[j + 1];

n[j] = 0;

if (c == '+') sy[j] = '+'; //判断乘除的前一个运算符是什么

else sy[j] = '-';

}

else if (sy[j] == '÷')

{

if (n[j + 1] != 0) n[j + 1] = n[j] / n[j + 1];

else n[j + 1] = 0;

n[j] = 0;

if (c == '+') sy[j] = '+';

else sy[j] = '-';

} else

c = sy[j];

}

result = n[0];

for (int j = 0; j < slen; j++) { //求和

if (sy[j] == '+') result += n[j + 1];

if (sy[j] == '-') result -= n[j + 1];

}

}

if((int)result == result )editText.setText((int)result+""); //显示

else

{ //控制输出小数点后6位

result = Double.parseDouble(String.format("%.6f", result));

editText.setText(result+"");

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取id

View b1 = findViewById(R.id.b1);

View b2 = findViewById(R.id.b2);

View b3= findViewById(R.id.b3);

View b4 = findViewById(R.id.b4);

View b5 = findViewById(R.id.b5);

View b6 = findViewById(R.id.b6);

View b7 = findViewById(R.id.b7);

View b8 = findViewById(R.id.b8);

View b9 = findViewById(R.id.b9);

View b0 = findViewById(R.id.b0);

View b00 = findViewById(R.id.b00);

//运算符

View plus = findViewById(R.id.plus);// +

View sub = findViewById(R.id.sub);// -

View mul = findViewById(R.id.mul);// *

View per = findViewById(R.id.per); // %

View div = findViewById(R.id.div); // /

View dot = findViewById(R.id.dot);//小数点

View equ = findViewById(R.id.equ);//=

View clear = findViewById(R.id.clear);//清空

View back = findViewById(R.id.back); //回退

editText = (EditText) findViewById(R.id.editText);//结果集

//添加监听事件

b0.setOnClickListener(this);

b1.setOnClickListener(this);

b2.setOnClickListener(this);

b3.setOnClickListener(this);

b4.setOnClickListener(this);

b5.setOnClickListener(this);

b6.setOnClickListener(this);

b7.setOnClickListener(this);

b8.setOnClickListener(this);

b9.setOnClickListener(this);

b00.setOnClickListener(this);

per.setOnClickListener(this);

plus.setOnClickListener(this);

sub.setOnClickListener(this);

mul.setOnClickListener(this);

div.setOnClickListener(this);

dot.setOnClickListener(this);

equ.setOnClickListener(this);

clear.setOnClickListener(this);

back.setOnClickListener(this);

}

}

测试

关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现!

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

android调用手机自带计算器,Android实现简易的计算器相关推荐

  1. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法

    Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...

  2. Android 调用手机系统照相机拍照

    Android 调用手机系统照相机拍照 并用ImageView显示    此方法获得的是拍照的原图片而非缩略图. 1.首先是布局文件activity_main.xml <RelativeLayo ...

  3. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  4. android 调用手机震动

    范例说明提到了与手机的交互控制,就不能不提到手机震动事件.手机的震动,可以是一种提醒或替换铃声的事件,所以在这个范例中,将学到如何触发手机震动事件,虽然震动是手机默认的模式,但通过程序的辅助,可以做更 ...

  5. Android调用系统自带的文件管理器进行文件选择

    这几天在做的项目网盘.上传时需要用到调用系统自带的文件管理器来选择文件,后来就在考虑怎么调用,网上也搜了很久,没有很好的解决方法,后来在一瞬间发现了一篇不错的文章,借鉴了一下代码. [java] vi ...

  6. Android调用手机图库选择图片并调用手机的图片裁剪工具

    /*** 获得图库图片回调标识*/public static final int GET_PIC_FROM_GALLERY = 0X100;/*** 调用手机工具编辑图片标识*/public stat ...

  7. 录音转成文字 android,安卓手机自带的录音转文字功能这么强大,堪称会议神器!你会用吗...

    原标题:安卓手机自带的录音转文字功能这么强大,堪称会议神器!你会用吗 有的小伙伴在开会时经常需要录音,然后要对录音进行整理变成文字稿,每次都要花很多的时间和精力,难不成你还在傻傻的手动录入,别傻了!不 ...

  8. Android调用手机中的应用市场,去评分的功能实现

    在我们常常使用的软件当中,我们经常可以看到在软件的设置界面,有一个功能那就是去评分的功能,只要我们一点击"去评分"就会调用手机中的应用市场软件.一开始我以为这个功能的实现是要遍历整 ...

  9. android调用网页方法,Android调用手机浏览器的正确方式

    有时候我们需要调用手机的浏览器,搜索过会我们一般都能找到这样的代码: //从其他浏览器打开 Intent intent = new Intent(); intent.setAction(Intent. ...

最新文章

  1. php get memory,PHP memory_get_usage 和 memory_get_peak_usage获取内存的区别
  2. [值得学习]售前工程师的成长---一个老员工的经验之谈(一)
  3. 无法初始化链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Jet.OLEDB.4.0 的数据源对象...
  4. c语言两个数组按位合并,合并两个线性表(数组)并按照非递减排序输出,有点问题过来看看...
  5. docker命令:删除所有为stop状态的docker容器
  6. 三天内出现多次晃动,华强北最高楼今日起已被封闭了
  7. Python——装饰器(二)
  8. 【体系结构】shared pool的个人理解
  9. 服务器物理槽位和逻辑对应,如何查看Linux服务器的物理CPU逻辑CPU和CPU核数
  10. eclipse配置项目部署到到本地tomcat
  11. 22. linux 日志分析
  12. 应用随机过程-复习笔记-Chapter4-关于期望的各态历经性习题答案
  13. js连接mysql数据库
  14. windows删除注册表(通用方法)
  15. Apache web服务器 的下载安装
  16. java实现微软文本转语音(TTS)经验总结
  17. kali linux 64bit 2019.1a下启动bbqsql:No module named coros
  18. 使用xshell来操作服务器
  19. PowerBI visuals共计246组2020年1月31日扒取(Power BI 视觉对象)
  20. 窥探现代浏览器架构(二)

热门文章

  1. 服务器更换桌面壁纸,实时更换桌面背景工具
  2. 【EasyExcel应用】
  3. 30个顶级Python库:用于深度学习、自然语言处理和计算机视觉
  4. css修改鼠标点击的样式表
  5. 旅游中常用的简单英语会话
  6. 深入探寻《Self-Attentive Sequential Recommendation》ICDM‘18
  7. 基于yubikey配合pam登录centos的安全认证登录
  8. ex20 函数和文件
  9. [Error] range-based ‘for‘ loops are not allowed in C++98 mode 解决方法
  10. STM32F407-高级定时器PWM输出功能