例子

代码如下 复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/warpcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<HorizontalScrollView
android:id="@+id/scrollview"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/resultText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:gravity="right"
android:padding="8dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/number0"
android:textSize="40sp" />
</HorizontalScrollView >

<TableLayout
android:id="@+id/buttonTable"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:stretchColumns="*" >

<TableRow
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >

<Button
android:id="@+id/button7"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number7" />

<Button
android:id="@+id/button8"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number8" />

<Button
android:id="@+id/button9"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number9" />

<Button
android:id="@+id/buttonBackSpace"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/backspace" />

<Button
android:id="@+id/buttonClear"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/clear" />
</TableRow>

<TableRow
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >

<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number4" />

<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number5" />

<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number6" />

<Button
android:id="@+id/buttonMultiply"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/multiply" />

<Button
android:id="@+id/buttonDivide"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/divide" />
</TableRow>
</TableLayout>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal" >

<TableLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="3"
android:stretchColumns="*" >

<TableRow
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number1" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number2" />

<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number3" />
</TableRow>

<TableRow
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >

<Button
android:id="@+id/button0"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/number0" />

<Button
android:id="@+id/buttonDot"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@stri(www.111cn.net)ng/dot" />

<Button
android:id="@+id/buttonNegSign"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:onClick="onClickListener"
android:text="@string/negSign" />
</TableRow>
</TableLayout>

<Button
android:id="@+id/buttonPlus"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:onClick="onClickListener"
android:text="@string/plus" />

<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >

<Button
android:id="@+id/buttonMinus"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:onClick="onClickListener"
android:text="@string/minus" />

<Button
android:id="@+id/buttonEval"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:onClick="onClickListener"
android:text="@string/eval" />
</LinearLayout>
</LinearLayout>

</LinearLayout>

MainActivity类和之前的java计算器差不多:

代码如下 复制代码
package me.jerrys.calc;

import java.math.BigDecimal;

import android.support.v7.app.ActionBarActivity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
private TextView textView;
private BigDecimal lastNum = new BigDecimal("0");
private BigDecimal currentNum = new BigDecimal("0");
private String currentText;
private boolean typeClean = false;
private boolean hadCalced = false;
private MODE currentMode = MODE.PLUS;
private enum MODE {
PLUS, MINUS, MULTIPLY, DIVIDE
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.resultText);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public void onClickListener(View v) {
currentText = textView.getText().toString();
switch (v.getId()) {
case R.id.button0:
addNumber("0");
break;
case R.id.button1:
addNumber("1");
break;
case R.id.button2:
addNumber("2");
break;
case R.id.button3:
addNumber("3");
break;
case R.id.button4:
addNumber("4");
break;
case R.id.button5:
addNumber("5");
break;
case R.id.button6:
addNumber("6");
break;
case R.id.button7:
addNumber("7");
break;
case R.id.button8:
addNumber("8");
break;
case R.id.button9:
addNumber("9");
break;
case R.id.buttonNegSign:
addSign();
break;
case R.id.buttonClear:
clear();
break;
case R.id.buttonBackSpace:
backSpace();
break;
case R.id.buttonPlus:
setMode(MODE.PLUS);
break;
case R.id.buttonMinus:
setMode(MODE.MINUS);
break;
case R.id.buttonMultiply:
setMode(MODE.MULTIPLY);
break;
case R.id.buttonDivide:
setMode(MODE.DIVIDE);
break;
case R.id.buttonEval:
calc();
break;
case R.id.buttonDot:
addNumber(".");
break;
}
}
private void calc() {
if (hadCalced && typeClean) return;
currentNum = new BigDecimal(currentText);
try {
switch (currentMode) {
case PLUS:
lastNum = lastNum.add(currentNum);
break;
case MINUS:
lastNum = lastNum.subtract(currentNum);
break;
case MULTIPLY:
lastNum = lastNum.multiply(currentNum);
break;
case DIVIDE:
lastNum = lastNum.divide(currentNum, 16,
BigDecimal.ROUND_HALF_DOWN);
break;
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "发生错误:"+e.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
String resultText = lastNum.toString();
if (resultText.indexOf(".") > 0) { // 消除小数多余位数
resultText = resultText.replaceAll("0+?$", "");
resultText = resultText.replaceAll("[.]$", "");
}
setResultText(resultText);
typeClean = true;
hadCalced = false;
}
private void setMode(MODE mode) {
if (!hadCalced && !typeClean) {
calc();
currentMode = mode;
return;
}
lastNum = new BigDecimal(currentText);
currentMode = mode;
typeClean = true;
hadCalced = true;
}

private void addSign() {
if (currentText.equals("0") || currentText.equals("")) return;
if (currentText.startsWith("-")) setResultText(currentText.substring(1));
else setResultText("-" + currentText);
}

private void clear() {
currentNum = new BigDecimal("0");
lastNum = new BigDecimal("0");
typeClean = false;
currentMode = MODE.PLUS;
setResultText("0");
}

private void setResultText(String string) {
textView.setText(string);
}

public void addNumber(String num) {
String resultText = currentText;
if (typeClean == true) {
resultText = "0";
typeClean = false;
}
if (num.equals(".") && currentText.lastIndexOf(".") != -1) return;
if ((resultText.equals("0") || resultText.equals(""))
&& !num.equals("."))
resultText = "";
resultText = resultText + num;
setResultText(resultText);
}

private void backSpace() {
if (currentText.equals("0") || currentText.equals("")) return;
if (currentText.length() == 1) {
setResultText("0");
return;
}
setResultText(currentText.substring(0, currentText.length() - 1));
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_about) {
new AlertDialog.Builder(this).setTitle("关于").setMessage("【Android www.111cn.net简易计算器】n作者 JerryLocken博客 n源码 /android-simple-calc").setPositiveButton("确定", null).show();
return true;
}
return super.onOptionsItemSelected(item);
}
}

from:http://www.111cn.net/sj/android/60746.htm

Android开发实现计算器的例子的更多相关文章

  1. Android开发之计算器(一)界面设计

    计算器开发主要涉及到LinearLayout布局.EditText.Button的使用.为android入门基础内容. 打开android studio选择创建一个新的工程,应用程序的名称为Calcu ...

  2. Android开发之计算器(一)界面设计之activity_main布局文件

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. android 开发 碎片Fragment布局例子(用按键切换碎片布局)

    实现思路: 1.写一个父类布局,里面写一个按键和一个帧布局(用于给Fragment布局后续替代) 2.写3个子布局,并且在写3个class继承Fragment布局 3.在MainActivity的cl ...

  4. 【留念贴】Android开发——计算器

    [过程] 在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下. ...

  5. 【Android开发-4】进入实践,最喜欢折腾的计算器

    前言:前面对项目文件有了感性认识.接下来我们就须要通过不断实践,对项目的文件有理性的认识. 曾经折腾Unity3d.IOS开发都是拿计算器开刀.所以这次Android开发实践也不例外,继续拿计算器折腾 ...

  6. Android 开发笔记___初级控件之实战__计算器

    功能简单,实现并不难,对于初学者可以总和了解初级控件的基本使用. 用到的知识点如下: 线性布局 LinearLayout:整体界面是从上往下的,因此需要垂直方向的linearlayout:下面每行四个 ...

  7. android 开发 我的高德地图代码例子

    下载高德地图依赖库和相关注册方式,请查看高德开发者网站:http://lbs.amap.com/api/android-sdk/summary  点击打开链接 高德地图坐标拾取器:http://lbs ...

  8. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  9. 【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总

    教程下载: [免费]android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程[pdf高清版] http://down.51c ...

随机推荐

  1. docker toolbox在win7下的安装

    1.下载安装docker toolbox docker toolbox的下载地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...

  2. Transaction And Lock--READ COMMITTED隔离级别下的"脏读"

    在READ UNCOMMITTED事务隔离级别下或使用WITH(NOLOCK)来查询数据时,会出现脏读情况,因此对于一些比较"关键"的业务,会要求不能使用WITH(NOLOCK)或 ...

  3. 算法笔记_225:数字密码发生器(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全:如果设置不好记的密码,又担心自己也会忘记:如 ...

  4. 算法笔记_220:猜算式(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个 三位数. 如果没有限定条件,这样的例子很多. 但 ...

  5. tpcc-mysql 系列二:进行TPCC测试

    1:开始测试 tpcc_start -h server_host -P port -d database_name -u mysql_user \ -p mysql_password -w wareh ...

  6. 从join on和where执行顺序认识T-SQL查询处理执行顺序

    先从一例子看join on 和 where执行结果的不同 CREATE TABLE "SCOTT"."A" ( "PERSON_ID" ) ...

  7. 分布式锁和Redisson实现

    http://thoreauz.com/2017/08/20/language/java/%E5%9F%BA%E7%A1%80/%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81 ...

  8. Ajax学习(二):模仿jQuery的Ajax封装工具

    通过上一节的学习,基本了解Ajax的使用, 但是这样使用很麻烦,这里封装ajax为一个方法,作为一个ajax工具,传入相应参数就可以实现ajax的使用. 模仿jQuery的Ajax. 如下是jQuer ...

  9. 转 CentOS下php安装mcrypt扩展

    (以下步骤均为本人实际操作,可能与你的安装方法有所区别,但我会尽量排除疑惑) 大致步骤(1)安装mcrypt,(2)安装php对mcrypt的扩展,(3)重启apache (1).确认你的linux没 ...

  10. Dynamics CRM 2015 Update 1 系列(4): 自己定义主键 - Alternate Keys

    Alternate Keys. 还是和系统集成相关的一个重量级Feature.使用该Feature能极大的提高开发数据集成接口的时间成本以及接口的执行效率. 在之前的Dynamics CRM 版本号中 ...