首页 > 其他分享 >Android之一个简单计算器源代码

Android之一个简单计算器源代码

时间:2023-04-05 20:02:23浏览次数:39  
标签:BigDecimal Button num 计算器 print new Android 源代码 id

通过Android4.0 网格布局GridLayout来实现一个简单的计算器界面布局   源码如下(欢迎大家指导 批评 )

Android之一个简单计算器源代码_ide


 

package com.android.xiong.gridlayoutTest;
  
 import java.math.BigDecimal;
 import java.util.regex.Pattern;
  
 import com.android.xiong.gridlayoutTest.R.id;
  
 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.TextView;
  
 public class MainActivity extends Activity {
  
 	private EditText print;
  
 	private static String fistNumber = "0";// 第一次输入的值
 	private static String secondNumber = "0";// 第二次输入的值
 	private static String num = "0";// 显示的结果
 	private static int flg = 0;// 结果累加一次
 	public Counts take = null;
  
 	private int[] btidTake = { R.id.txtdivide, R.id.txtx, R.id.txtmin,
 			R.id.txttakesum };
  
 	private Button[] buttonTake = new Button[btidTake.length];
  
 	private int[] btidNum = { R.id.txt0, R.id.txt1, R.id.txt2, R.id.txt3,
 			R.id.txt4, R.id.txt5, R.id.txt6, R.id.txt7, R.id.txt8, R.id.txt9,
 			R.id.txtspl };
 	private Button[] buttons = new Button[btidNum.length];
  
 	private int[] btcl = { R.id.chars, R.id.charx, R.id.txtb, R.id.txtv };
 	private Button[] btcls = new Button[btcl.length];
  
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_main);
 		print = (EditText) findViewById(R.id.print);
 		print.setText("0");
 		print.setEnabled(false);
 		GetNumber get = new GetNumber();
 		for (int i = 0; i < btidNum.length; i++) {
 			buttons[i] = (Button) findViewById(btidNum[i]);
 			buttons[i].setOnClickListener(get);
 		}
 		Compute cm = new Compute();
 		for (int i = 0; i < btidTake.length; i++) {
 			buttonTake[i] = (Button) findViewById(btidTake[i]);
 			buttonTake[i].setOnClickListener(cm);
 		}
  
 		Button eq = (Button) findViewById(R.id.txteq);
  
 		eq.setOnClickListener(new OnClickListener() {
 			@Override
 			public void onClick(View v) {
 				if (flg == 0) {
 					secondNumber = print.getText().toString();
 					if (take == Counts.DIVIDE && secondNumber.equals("0")) {
 						print.setText("0不能为被除数");
 					} else {
 						num = take.Values(fistNumber, secondNumber);
 						fistNumber = num;
 						secondNumber = "0";
 						print.setText(num);
 						flg = 1;
 					}
 				}
 			}
 		});
 		Button cleargo = (Button) findViewById(R.id.cleargo);
 		cleargo.setOnClickListener(new OnClickListener() {
 			@Override
 			public void onClick(View v) {
 				// TODO Auto-generated method stub
 				if (num.length() > 1) {
 					num = num.substring(0, num.length() - 1);
 				} else {
 					num = "0";
 				}
 				print.setText(num);
 			}
 		});
 		Button clear = (Button) findViewById(R.id.clear);
 		clear.setOnClickListener(new OnClickListener() {
  
 			@Override
 			public void onClick(View v) {
 				// TODO Auto-generated method stub
 				num = "0";
 				fistNumber = secondNumber = num;
 				print.setText(num);
 				flg = 0;
 			}
 		});
 		for (int i = 0; i < btcl.length; i++) {
 			btcls[i] = (Button) findViewById(btcl[i]);
 			btcls[i].setOnClickListener(new OnTake());
 		}
 	}
  
 	// 给 EditText赋值
 	class GetNumber implements OnClickListener {
  
 		@Override
 		public void onClick(View v) {
 			// TODO Auto-generated method stub
 			if (flg == 1)
 				num = "0";
 			if (num.equals("0")) {
 				print.setText("");
 				num = v.getId() == R.id.txtspl ? "0" : "";
 			}
 			String txt = ((Button) v).getText().toString();
 			boolean s = Pattern.matches("(\\d+).?(\\d)*", num + txt);
 			num = s ? (num + txt) : num;
 			print.setText(num);
  
 		}
 	}
  
 	// 根据条件计算
 	class Compute implements OnClickListener {
  
 		@Override
 		public void onClick(View arg0) {
  
 			fistNumber = print.getText().toString();
 			// TODO Auto-generated method stub
 			switch (arg0.getId()) {
 			case R.id.txttakesum:
 				take = Counts.ADD;
 				break;
 			case R.id.txtmin:
 				take = Counts.MINUS;
 				break;
 			case R.id.txtx:
 				take = Counts.MULTIPLY;
 				break;
 			case R.id.txtdivide:
 				take = Counts.DIVIDE;
 				break;
 			}
 			num = "0";
 			flg = 0;
 		}
  
 	}
  
 	class OnTake implements OnClickListener {
  
 		@Override
 		public void onClick(View v) {
 			// TODO Auto-generated method stub
 			switch (v.getId()) {
 			case R.id.chars:
 				num = "-" + num;
 				break;
 			case R.id.charx:
 				num = BigDecimal.valueOf(1).divide(new BigDecimal(num))
 						.toString();
 				break;
 			case R.id.txtb:
 				num = new BigDecimal(num).divide(BigDecimal.valueOf(100))
 						.toString();
 				break;
 			case R.id.txtv:
 				Double numss = Math.sqrt(new BigDecimal(num).doubleValue());
 				num = numss.toString();
 			}
 			print.setText(num);
 			flg=0;
  
 		}
  
 	}
  
 	@Override
 	public boolean onCreateOptionsMenu(Menu menu) {
 		// Inflate the menu; this adds items to the action bar if it is present.
 		getMenuInflater().inflate(R.menu.main, menu);
 		return true;
 	}
  
 }

 

package com.android.xiong.gridlayoutTest;
  
 import java.math.BigDecimal;
  
 public enum Counts {
 	ADD, MINUS, MULTIPLY, DIVIDE, MARK, ROOT;
 	public String Values(String num1, String num2) {
 		BigDecimal number1 = new BigDecimal(num1);
 		BigDecimal number2 = new BigDecimal(num2);
 		BigDecimal number = BigDecimal.valueOf(0);
 		switch (this) {
 		case ADD:
 			number = number1.add(number2);
 			break;
 		case MINUS:
 			number = number1.subtract(number2);
 			break;
 		case MULTIPLY:
 			number = number1.multiply(number2);
 			break;
 		case DIVIDE:
 			number = number1.divide(number2,20,BigDecimal.ROUND_UP);
 			break;
  
 		}
 		return number.toString();
  
 	}
  
 }

 

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="40px"
     android:columnCount="5"
     android:rowCount="6"
     tools:context=".MainActivity" >
  
     <EditText
         android:id="@+id/print"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_columnSpan="5"
         android:layout_marginLeft="2px"
         android:layout_marginRight="2px"
         android:layout_row="0"
         android:background="#eee" />
  
     <Button
         android:id="@+id/cleargo"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="0"
         android:layout_row="1"
         android:text="《--" />
  
     <Button
         android:id="@+id/clear"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="3"
         android:layout_columnSpan="2"
         android:layout_row="1"
         android:layout_gravity="fill_horizontal"
         android:text="清屏" />
  
     <Button
         android:id="@+id/chars"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="1"
         android:layout_row="1"
         android:text="-/+" />
  
     <Button
         android:id="@+id/charx"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="2"
         android:layout_row="1"
         android:text="1/x" />
  
     <Button
         android:id="@+id/txt7"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="0"
         android:layout_row="2"
         android:text="7" />
  
     <Button
         android:id="@+id/txt8"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="1"
         android:layout_row="2"
         android:text="8" />
  
     <Button
         android:id="@+id/txt9"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="2"
         android:layout_row="2"
         android:text="9" />
  
     <Button
         android:id="@+id/txtdivide"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="3"
         android:layout_row="2"
         android:text="÷" />
  
     <Button
         android:id="@+id/txtb"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="4"
         android:layout_row="2"
         android:text="%" />
  
     <Button
         android:id="@+id/txt4"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="0"
         android:layout_row="3"
         android:text="4" />
  
     <Button
         android:id="@+id/txt5"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="1"
         android:layout_row="3"
         android:text="5" />
  
     <Button
         android:id="@+id/txt6"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="2"
         android:layout_row="3"
         android:text="6" />
  
     <Button
         android:id="@+id/txtx"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="3"
         android:layout_row="3"
         android:text="X" />
  
     <Button
         android:id="@+id/txtv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="4"
         android:layout_row="3"
         android:text="√" />
  
     <Button
         android:id="@+id/txt1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="0"
         android:layout_row="4"
         android:text="1" />
  
     <Button
         android:id="@+id/txt2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="1"
         android:layout_row="4"
         android:text="2" />
  
     <Button
         android:id="@+id/txt3"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="2"
         android:layout_row="4"
         android:text="3" />
  
     <Button
         android:id="@+id/txtmin"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="3"
         android:layout_row="4"
         android:text="-" />
  
     <Button
         android:id="@+id/txteq"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="4"
         android:layout_gravity="fill_vertical"
         android:layout_row="4"
         android:layout_rowSpan="2"
         android:text="=" />
  
     <Button
         android:id="@+id/txt0"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="0"
         android:layout_columnSpan="2"
         android:layout_gravity="fill_horizontal"
         android:layout_row="5"
         android:text="0" />
  
     <Button
         android:id="@+id/txtspl"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="2"
         android:layout_row="5"
         android:text="." />
  
     <Button
         android:id="@+id/txttakesum"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_column="3"
         android:layout_row="5"
         android:text="+" />
  
 </GridLayout>


标签:BigDecimal,Button,num,计算器,print,new,Android,源代码,id
From: https://blog.51cto.com/u_14682436/6171516

相关文章

  • Android MVP 实例
    本文是「吴小龙同学」投稿,MVP其实一直被提及比较多,我的读者们可能有一些人不理解,其实再多的理论比不上一次简单的实践,这篇文章就以一个简单的请求天气功能,来演示AndroidMVP是如何使用的。效果预览准备MVP流程说明:步骤1:UI实现View方法,引用Presenter步骤2:Presenter调用Model,走Model......
  • Android性能优化总结
    这是来自一位粉丝「MeloDev」的投稿,讲真,我这里投稿的不少,但是只有我自己觉得很不错的才会通过,这篇文章我觉得对大家有用,而且性能优化也算是我面试必问的一个话题了,所以这里推荐给大家。微信不支持链接,可点击「阅读原文」查看原文。写在前面公司给了我一周的时间去学习Android性能的......
  • Android开发如何进阶?
    本着每周至少有干货产出的原则,今天必须写篇干货来回馈大家,我这的干货可是不收费的哦,争取以后的目标是让你们看完我的文章不赞赏都觉得亏得慌!之前不少人都问我同一个问题,就是我学习Android有一两年了,但是遇到瓶颈了,感觉没什么进步,到底怎么才能进阶呢?我相信有不少人遇到这样的困扰,那......
  • Android 还可以走多久?
    阅读文本大概需要1.8分钟。最近,有位知识星球的球友问我这么一个问题:「张哥,我做Android开发两年多时间了,但是最近总是很焦虑,看着人工智能越来越火,很担心Android要不行了,想问下,我现在要转行么?Android还可以走多久?」这个问题我觉得还蛮有代表性的,今天就姑且给大家谈谈这个话题......
  • Android 构建工具--AAPT2源码解析(一)
    一、什么是AAPT2在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物“APK”文件。常规APK的构建流程如下:(引用自Google官方文档)编译所有的资源文件,生成资源表和R文件;编译Java文件并把class文件打包为dex文件;打包资源和dex文件,生成未签名的APK文件;签名APK生成......
  • 手把手教你实现Android编译期注解
    一、编译期注解在开发中的重要性从早期令人惊艳的ButterKnife,到后来的以ARouter为首的各种路由框架,再到现在谷歌大力推行的Jetpack组件,越来越多的第三方框架都在使用编译期注解这门技术,可以说不管你是想要深入研究这些第三方框架的原理还是要成为一个Android高级开发工程师,编译期......
  • Windows11搭建Qt 6.4.2 for Android+OpenCV4.7.0开发环境
    1.下载opencv-4.7.0-android-sdk.zip,下载地址:https://opencv.org/releases/,解压后,如下图:  2.编辑opecv_android.pri,内容如下(可使用命令行命令-dir*.a/ON/B>v8a.txt):message('Linux/Andoirdisrunning!')#data.files+=images/*.*#data.files+=dnn/*.prototxt#data.files......
  • 使用Android NDK Camera2经验总结
    2023年03月30日NDKCamera参考文章:https://blog.csdn.net/daihuimaozideren/article/details/101235393项目链接:https://github.com/qi-xmu/Android-ndk-camera-zh.git项目基于官方NDKCamera2texturesample,添加了详细的中午注释,点个Star!!!谢谢!第一部分程序入口逻辑首先需......
  • Android 原生 SQLite 数据库的一次封装实践
    作者:LiBingyan本文主要讲述原生SQLite数据库的一次ORM封装实践,给使用原生数据库操作的业务场景(如:本身是一个SDK)带来一些启示和参考意义,以及跟随框架的实现思路对数据库操作、APT、泛型等概念更深一层的理解。实现思路:通过动态代理获取请求接口参数进行SQL拼凑,并以接口返回值(泛型)......
  • Android 加载图片占用内存分析
    作者:XuJie不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的静态图片,放在Android工程目录下面的res/drawable-[density]/......