Android计算器开发实例

Android简单计算器开发实例如图:

====================================================

activity_main.xml 代码如下:

<TableLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"

/>
    
    <TableRow>
        <EditText android:id="@+id/result" android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:drawable/editbox_background"
            android:layout_span="4" android:textSize="40sp" android:gravity="right|center_vertical"
            android:cursorVisible="false" android:editable="false" android:lines="1" />
    </TableRow>

<TableRow>
        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:textSize="42sp" android:layout_weight="1">
            <Button android:id="@+id/num7" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="7" android:layout_weight="1" />
            <Button android:id="@+id/num8" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="8" android:layout_weight="1" />
            <Button android:id="@+id/num9" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="9" android:layout_weight="1" />
            <Button android:id="@+id/divide" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="/" android:layout_weight="1" />
        </LinearLayout>
    </TableRow>

<TableRow>
        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:textSize="42sp" android:layout_weight="1">
            <Button android:id="@+id/num4" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="4" android:layout_weight="1" />
            <Button android:id="@+id/num5" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="5" android:layout_weight="1" />
            <Button android:id="@+id/num6" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="6" android:layout_weight="1" />
            <Button android:id="@+id/multiply" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="*" android:layout_weight="1" />
        </LinearLayout>
    </TableRow>

<TableRow>
        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:textSize="42sp" android:layout_weight="1">
            <Button android:id="@+id/num1" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="1" android:layout_weight="1" />
            <Button android:id="@+id/num2" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="2" android:layout_weight="1" />
            <Button android:id="@+id/num3" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="3" android:layout_weight="1" />
            <Button android:id="@+id/subtract" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="-" android:layout_weight="1" />
        </LinearLayout>
    </TableRow>

<TableRow>
        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:textSize="42sp" android:layout_weight="1">
            <Button android:id="@+id/num0" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="0" android:layout_weight="1" />
            <Button android:id="@+id/point" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="." android:layout_weight="1" />
            <Button android:id="@+id/add" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="+" android:layout_weight="1" />
            <Button android:id="@+id/equal" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textSize="42sp"
                android:text="=" android:layout_weight="1" />
        </LinearLayout>
    </TableRow>

<TableRow>
        <Button android:id="@+id/clear" android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:textSize="30sp"
            android:text="clear" android:layout_span="4" android:gravity="center_vertical|center_horizontal"/>
    </TableRow>

</TableLayout >

====================================================================

MainActivity 类代码如下:

package com.example.jisuanqi;

import android.os.Bundle;

import android.app.Activity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

public class MainActivity extends Activity {

private Button[] btnNum = new Button[11];// 数值按钮 
     private Button[] btnCommand = new Button[5];// 符号按钮 
     private EditText editText = null;// 显示区域 
     private Button btnClear = null; // clear按钮 
     private String lastCommand; // 用于保存运算符 
     private boolean clearFlag; // 用于判断是否清空显示区域的值,true需要,false不需要 
     private boolean firstFlag; // 用于判断是否是首次输入,true首次,false不是首次 
     private double result; // 计算结果

public void calculator() {
         // 初始化各项值 
         result = 0; // x的值 
         firstFlag = true; // 是首次运算 
         clearFlag = false; // 不需要清空 
         lastCommand = "="; // 运算符 
     }

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  // 获取运算符 
        btnCommand[0] = (Button) findViewById(R.id.add);
        btnCommand[1] = (Button) findViewById(R.id.subtract);
        btnCommand[2] = (Button) findViewById(R.id.multiply);
        btnCommand[3] = (Button) findViewById(R.id.divide);
        btnCommand[4] = (Button) findViewById(R.id.equal);

// 获取数字 
        btnNum[0] = (Button) findViewById(R.id.num0);
        btnNum[1] = (Button) findViewById(R.id.num1);
        btnNum[2] = (Button) findViewById(R.id.num2);
        btnNum[3] = (Button) findViewById(R.id.num3);
        btnNum[4] = (Button) findViewById(R.id.num4);
        btnNum[5] = (Button) findViewById(R.id.num5);
        btnNum[6] = (Button) findViewById(R.id.num6);
        btnNum[7] = (Button) findViewById(R.id.num7);
        btnNum[8] = (Button) findViewById(R.id.num8);
        btnNum[9] = (Button) findViewById(R.id.num9);
        btnNum[10] = (Button) findViewById(R.id.point);
       
     // 初始化显示结果区域 
        editText = (EditText) findViewById(R.id.result);
        editText.setText("0.0");
        // 实例化监听器对象 
        NumberAction na = new NumberAction();
        CommandAction ca = new CommandAction();
        for (Button bc : btnCommand) {
            bc.setOnClickListener(ca);
        }
        for (Button bc : btnNum) {
            bc.setOnClickListener(na);
        }

// clear按钮的动作 
        btnClear = (Button) findViewById(R.id.clear);
        btnClear.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                editText.setText("0.0");
                // 初始化各项值 
                result = 0; // x的值 
                firstFlag = true; // 是首次运算 
                clearFlag = false; // 不需要清空 
                lastCommand = "="; // 运算符 
            }
        });
 }

// 数字按钮监听器 
    private class NumberAction implements OnClickListener {
        @Override
        public void onClick(View view) {
            Button btn = (Button) view;
            String input = btn.getText().toString();
            if (firstFlag) { // 首次输入 
                // 一上就".",就什么也不做 
                if (input.equals(".")) {
                    return;
                }
                // 如果是"0.0"的话,就清空 
                if (editText.getText().toString().equals("0.0")) {
                    editText.setText("");
                }
                firstFlag = false;// 改变是否首次输入的标记值 
            } else {
                String editTextStr = editText.getText().toString();
                // 判断显示区域的值里面是否已经有".",如果有,输入的又是".",就什么都不做 
                if (editTextStr.indexOf(".") != -1 && input.equals(".")) {
                    return;
                }
                // 判断显示区域的值里面只有"-",输入的又是".",就什么都不做 
                if (editTextStr.equals("-") && input.equals(".")) {
                    return;
                }
                // 判断显示区域的值如果是"0",输入的不是".",就什么也不做 
                if (editTextStr.equals("0") && !input.equals(".")) {
                    return;
                }
            }
            // 如果我点击了运算符以后,再输入数字的话,就要清空显示区域的值 
            if (clearFlag) {
                editText.setText("");
                clearFlag = false;// 还原初始值,不需要清空 
            }
            editText.setText(editText.getText().toString() + input);// 设置显示区域的值 
        }
    }

// 符号按钮监听器 
    private class CommandAction implements OnClickListener {
        @Override
        public void onClick(View view) {
            Button btn = (Button) view;
            String inputCommand = (String) btn.getText();
            if (firstFlag) {// 首次输入"-"的情况 
                if (inputCommand.equals("-")) {
                    editText.setText("-");// 显示区域的内容设置为"-" 
                    firstFlag = false;// 改变首次输入的标记 
                }
            } else {
                if (!clearFlag) {// 如果flag=false不需要清空显示区的值,就调用方法计算 
                    calculate(Double.parseDouble(editText.getText().toString()));// 保存显示区域的值,并计算 
                }
                // 保存你点击的运算符 
                lastCommand = inputCommand;
                clearFlag = true;// 因为我这里已经输入过运算符, 
            }
        }
    }

// 计算用的方法 
    private void calculate(double x) { 
         
        if (lastCommand.equals("+")) {
            result += x;
        } else if (lastCommand.equals("-")) {
            result -= x;
        } else if (lastCommand.equals("*")) {
            result *= x;
        } else if (lastCommand.equals("/")) {
            result /= x;
        } else if (lastCommand.equals("=")) {
            result = x;
        }
        editText.setText("" + result);
    }

}

时间: 2024-10-14 06:26:44

Android计算器开发实例的相关文章

android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http://www.tompda.com/c/article/11778/ 而实际上使用android平台对widget开发的支持,桌面便签类软件是很易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 1.MyNote的终于实现效果 为了提起大家阅读本文的兴趣,先

Android Widget 开发实例:桌面便签程序的实现详解和源码

桌面便签软件是Android上常用软件的一种,比如比较早的Sticky Note,就曾非常流行,而实际上使用android平台对widget开发的支持,桌面便签类软件是非常易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 同时本程序提供完整的工程源码下载 免费下载地址在 http://linux.linuxidc.com/ 用户名与密码都是www.linuxidc.com 具体下载目录在 /pub/Android源码集锦/2011年/10月/An

android 浏览器开发实例

android app需要通过手机显示网页信息还是比较常用的,比如我最近业余开发的 抢商铺游戏,需要对游戏规则做说明,规则会比较多,而且要经常变动,就想到用网页来展示,更新起来方便,不像应用,一旦发布出去,就很难更改. 言归正传,下面介绍下我对系统webview的使用,做的一个简单浏览器,无图无真像,先看看图(博客园不能传图片,等图片功能恢复了再传): 首先是布局文件的编辑activity_browser.xml 采用RelativeLayout布局,不知道为什么采用LinearLayout布局

Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)

学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学连接外网登录,其他网站需要自己进行抓包测试. 2.声明,本文更多的是关注网络抓包已经,本地构造,如果有什么错误,请尽情指教,非常感谢. 3.声明,最后源代码,以全部上传github,需要的同志可以自行下载,文章结尾会附带链接. 废话不多说,正文开始: 学校官网 第一步,首先需要实现的是登录操作: 当

Android应用开发实例篇(1)-----简易涂鸦板

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378328.html 一.概述 这次要做一个简单的涂鸦板应用,以前在Qt上实现过,突然想到要把它在Android上实现,呵呵,既简单又有趣. 二.实现 新建工程MyWall,修改/res/layout/main.xml文件,在里面添加一个SurfaceView和两个Button,用到了RelativeLayout布局,完整的main.xml文件如下: 1 <?xml version=&qu

Android手机拨打电话的开发实例

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

Android开发实例之miniTwitter登录界面的实现

原文: http://www.jizhuomi.com/android/example/134.html 本文要演示的Android开发实例是如何完成一个Android中的miniTwitter登录界面,下面将分步骤讲解怎样实现图中的界面效果,让大家都能轻松的做出美观的登录界面. miniTwitter登录界面效果图 先贴上最终要完成的效果图: miniTwitter登录界面的布局分析 首先由界面图分析布局,基本可以分为三个部分,下面分别讲解每个部分. 第一部分是一个带渐变色背景的LinearL

Android系统Google Maps开发实例浅析

Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用.Google Map的服务体现在两个方面:地图API和位置API.使用Android Maps API(地图API)和Android Location API(定位API)可以轻松实现实用而且强大的功能. 我的位置:“我的位置”在地图上显示你的当前位置(通常在 1000 米范围之内).即使没有 GP

实现Android半透明Menu效果的开发实例

不知道大家是否用过天天动听,对于它界面上的半透明Menu效果,笔者感觉非常漂亮.下面是天天动听半透明Menu的截图,欣赏下吧: 感觉还不错吧?那么如何实现这种半透明Menu效果呢?本文就重点讨论并给出这种Menu的具体代码实现过程. 首先分析下实现这种半透明Menu所需做的工作,并进行合理分解: 1.  利用Shaper设置一个半透明圆角背景. 2.  定义Menu布局,主要就GridView,把图标都放在这个GridView. 3.  Menu事件, 通过PopupWindow或者AlertD