android计算器开发
注:现在对于eclipse开发的android项目可以直接导入到androidstudio中。
android开发初学的第一个程序:
1.先构建android项目
2.构建出简单的计算器界面
3.对按键布局进行动作监听设置,并作出相应的反馈操作
4.打开虚拟机调试程序
操作1得到如下:
操作2之后:
对于计算器的背景图片是我自己添加的,需要把该图片复制到res/drawable开头的文件夹下,每个都要。
布局代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bgi"android:gravity="center_horizontal"android:orientation="vertical" ><TableLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="10dp"android:gravity="center_horizontal" ><TextViewandroid:id="@+id/textView3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="输入:" /><EditTextandroid:id="@+id/editText1"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_alignLeft="@+id/button17"android:layout_below="@+id/textView1"android:background="#666"android:ems="10"android:gravity="center_vertical|right" android:singleLine="true"android:textColor="#000"android:textSize="28dp" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="结果:" /><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_alignLeft="@+id/editText1"android:layout_alignParentTop="true"android:layout_alignRight="@+id/editText1"android:layout_marginBottom="10dp"android:background="#666"android:text=" "android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#fff"android:textSize="15dp"android:gravity="center_vertical|right" /><TableRowandroid:id="@+id/tableRow1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:gravity="center_horizontal" ><Buttonandroid:id="@+id/button_CE"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_CE" /><Buttonandroid:id="@+id/button_DELETE"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_DELETE" /><Buttonandroid:id="@+id/button_XX"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_XX" /><Buttonandroid:id="@+id/button_ADD"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_ADD" /></TableRow><TableRowandroid:id="@+id/tableRow2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:gravity="center_horizontal" ><Buttonandroid:id="@+id/button_1"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_1" /><Buttonandroid:id="@+id/button_2"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_2" /><Buttonandroid:id="@+id/button_3"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_3" /><Buttonandroid:id="@+id/button_SUB"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_SUB" /></TableRow><TableRowandroid:id="@+id/tableRow3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:gravity="center_horizontal" ><Buttonandroid:id="@+id/button_4"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_4" /><Buttonandroid:id="@+id/button_5"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_5" /><Buttonandroid:id="@+id/button_6"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_6" /><Buttonandroid:id="@+id/button_MUL"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_X" /></TableRow><TableRowandroid:id="@+id/tableRow4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:gravity="center_horizontal" ><Buttonandroid:id="@+id/button_7"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_7" /><Buttonandroid:id="@+id/button_8"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_8" /><Buttonandroid:id="@+id/button_9"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_9" /><Buttonandroid:id="@+id/button_DEV"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_DEV" /></TableRow></TableLayout>
<TableRowandroid:id="@+id/tableRow5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginBottom="5dp"android:gravity="center_horizontal" ><Buttonandroid:id="@+id/button_dot"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_dot" /><Buttonandroid:id="@+id/button_0"android:layout_width="80dp"android:layout_height="60dp"android:text="@string/button_0" /><Buttonandroid:id="@+id/button_EQU"android:layout_width="160dp"android:layout_height="60dp"android:text="@string/button_EQU" /></TableRow>
</LinearLayout>
res/values/strings.xml下的代码:
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">Caculator</string><string name="hello_world">Hello world!</string><string name="button_CE">CE</string><string name="button">DELETE</string><string name="button_DELETE">DEL</string><string name="button_XX">x²</string><string name="button_ADD">+</string><string name="button_1">1</string><string name="button_2">2</string><string name="button_3">3</string><string name="button_SUB">-</string><string name="button_4">4</string><string name="button_5">5</string><string name="button_6">6</string><string name="button_X">×</string><string name="button_7">7</string><string name="button_8">8</string><string name="button_9">9</string><string name="button_DEV">÷</string><string name="button_0">0</string><string name="button_dot">.</string><string name="button_EQU">=</string></resources>
接下来就是对已经布局好的案件操作进行监听并对响应的操作进行反馈:
src/Mainactivity.java文件:
package com.example.caculator;import java.util.Arrays;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import bsh.EvalError;
import bsh.Interpreter;public class MainActivity extends Activity {//声明变量private Button button_1;private Button button_2;private Button button_3;private Button button_4;private Button button_5;private Button button_6;private Button button_7;private Button button_8;private Button button_9;private Button button_0;private Button button_dot;private Button button_ADD;private Button button_SUB;private Button button_MUL;private Button button_DEV;private Button button_EQU;private Button button_DEL;private Button button_XX;private Button button_CE;private EditText edittext;static TextView textview;static String password="";static int index;boolean isClear = false; //用于记录依稀/**** @param exp 算数表达式* @return 根据表达式返回结果*/private String getRs(String exp){Interpreter bsh = new Interpreter();Number result = null;try {exp = filterExp(exp);result = (Number)bsh.eval(exp);} catch (EvalError e) {e.printStackTrace();isClear = true;return "算数公式错误";} return result.doubleValue()+"";}/*** @param exp 算数表达式* @return 因为计算过程中,全程需要有小数参与.*/private String filterExp(String exp) {String num[] = exp.split("");String temp = null;int begin=0,end=0;for (int i = 1; i < num.length; i++) {temp = num[i];if(temp.matches("[+-/()*]")){if(temp.equals(".")) continue;end = i - 1; temp = exp.substring(begin, end);if(temp.trim().length() > 0 && temp.indexOf(".")<0)num[i-1] = num[i-1]+".0";begin = end + 1;}}return Arrays.toString(num).replaceAll("[\\[\\], ]", "");}protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取对象引用button_1=(Button) this.findViewById(R.id.button_1);button_2=(Button) this.findViewById(R.id.button_2);button_3=(Button) this.findViewById(R.id.button_3);button_4=(Button) this.findViewById(R.id.button_4);button_5=(Button) this.findViewById(R.id.button_5);button_6=(Button) this.findViewById(R.id.button_6);button_7=(Button) this.findViewById(R.id.button_7);button_8=(Button) this.findViewById(R.id.button_8);button_9=(Button) this.findViewById(R.id.button_9);button_0=(Button) this.findViewById(R.id.button_0);button_dot=(Button) this.findViewById(R.id.button_dot);button_ADD=(Button) this.findViewById(R.id.button_ADD);button_SUB=(Button) this.findViewById(R.id.button_SUB);button_MUL=(Button) this.findViewById(R.id.button_MUL);button_DEV=(Button) this.findViewById(R.id.button_DEV);button_EQU=(Button) this.findViewById(R.id.button_EQU);button_DEL=(Button) this.findViewById(R.id.button_DELETE);button_XX=(Button) this.findViewById(R.id.button_XX);button_CE=(Button) this.findViewById(R.id.button_CE);edittext=(EditText) this.findViewById(R.id.editText1);textview=(TextView) this.findViewById(R.id.textView1);button_1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="1";edittext.setText(password);edittext.setSelection(password.length());//将光标定位到最右边
// textview.setText(password);} });button_2.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {password+="2";edittext.setText(password);edittext.setSelection(password.length());} });button_3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="3";edittext.setText(password);edittext.setSelection(password.length());} });button_4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="4";edittext.setText(password);edittext.setSelection(password.length());} });button_5.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="5";edittext.setText(password);edittext.setSelection(password.length());} });button_6.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="6";edittext.setText(password);edittext.setSelection(password.length());} });button_7.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="7";edittext.setText(password);edittext.setSelection(password.length());} });button_8.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="8";edittext.setText(password);edittext.setSelection(password.length());} });button_9.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="9";edittext.setText(password);edittext.setSelection(password.length());} });button_0.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="0";edittext.setText(password);edittext.setSelection(password.length());} });button_dot.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+=".";edittext.setText(password);edittext.setSelection(password.length());} });button_ADD.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="+";edittext.setText(password);edittext.setSelection(password.length());} });button_SUB.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="-";edittext.setText(password);edittext.setSelection(password.length());} });button_MUL.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password+="×";edittext.setText(password);edittext.setSelection(password.length());} });button_DEV.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {password+="÷";edittext.setText(password);edittext.setSelection(password.length());} });button_EQU.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//计算//-----------------------------------------------------String exp=password;exp = exp.replaceAll("×", "*");exp = exp.replaceAll("÷", "/");
// textview.setText(exp);if(exp==null || exp.trim().length()==0)return; exp = getRs(exp);textview.setText(exp); isClear = false;//-----------------------------------------------------} });button_CE.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password="";edittext.setText(password);textview.setText("");} });button_DEL.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(password.length()>0){password=password.substring(0,password.length()-1);}
// else {
// password=password;
// }edittext.setText(password);edittext.setSelection(password.length());}});button_XX.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {password="("+password+")"+"×"+"("+password+")";edittext.setText(password);edittext.setSelection(password.length());} });}
}
4.最后得到的程序运行:
程序中其实还有不完善的地方:
1.对于程序中使用String类型来处理得到按键字符,对每一次的操作是在字符串后面进行+操作,对于String字符串拼接性能并不高
每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以现阶段对于经常变化的字符串建议使用Stringbuilder。
2.对于计算还有不精确的地方(先还没有进行优化)。
大家可以下载玩玩:http://pan.baidu.com/s/1slm8T1F
android计算器开发相关推荐
- android计算器开发论文,基于Android计算器功能的实现毕业设计论文
<基于Android计算器功能的实现毕业设计论文.doc>由会员分享,可免费在线阅读全文,更多与<基于Android计算器功能的实现毕业设计论文>相关文档资源请在帮帮文库(ww ...
- android计算器开发报告总结,android简易计算器总结
一:如图,首先布局计算器主页显示: activity_main.xml xmlns:tools="http://schemas.android.com/tools" android ...
- eclipse完成Android计算器界面开发,并且实现基本的功能(加减乘除、清零)
eclipse完成Android计算器界面开发,并且实现基本的功能(加减乘除.清零) 先布局好计算器的结构样式,再编写java文件,如下: activity_main.xml代码 <Linear ...
- 5G 时代的 Android App 开发入门与项目实战
随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑.智能电视.车载大屏.智能家居.智能手表等诸多设备,Android开发依然是前景可期的IT岗位. 当然,整个社会正在迈向5G时代 ...
- 《Android游戏开发详解》一导读
前 言 Android游戏开发详解 作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记
2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...
- github android 计算器,Android studio实现简单的计算器
本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下 需求分析及概要设计 目的 开发一个简单的计算器App,使之能够完成加减乘除混合运算 工具及环境 使用 ...
- Google Android SDK开发范例大全
1. 图书信息: Google Android SDK开发范例大全(第2版) 人民邮电出版社 2010-6-1 0:00:00 余志龙;陈昱勋;郑名杰;陈小凤;郭秩均 79 元 ISBN:97 ...
- Android中文开发教程()
本文是对Android SDK1.5版的英文开发资料Android Development Guide一文应用程序框架部分的翻译,覆盖了Android应用开发所有主要的概念.部分内容整理自网络.本文仅 ...
最新文章
- java 2分钟_java – 为什么我的应用程序启动时间超过2分钟?
- openstack-mitaka之Telemetry服务(controller安装部署二)
- RESTful设计原则和样例(开发前后台接口)
- Python入门实战题目
- SpringBoot+Mybatis加载Mapper.xml文件的两种方式
- 拓展 NLog 优雅的输送日志到 Logstash
- 共享锁和排它锁---C++17 多线程
- 文档理解最新技术介绍 | DAS 2020 Keynote Speech
- 比特币怎么比特币钱包_5分钟内获得比特币
- java 关闭对话框_java等待关闭对话框
- 实对称矩阵的特征值求法_MIT—微分方程与线性代数笔记6.5 对称矩阵,实特征值,正交特征向量...
- 工程项目管理系统java程序,基于jsp的工程项目管理系统-JavaEE实现工程项目管理系统 - java项目源码...
- 洛谷----P3717 [AHOI2017初中组]cover
- Java | Java模拟实现扑克牌洗牌、发牌过程
- iphone和iPad开发的区别
- 高绩效团队-VUCA时代的五个管理策略《三》—创新管理
- 计算机应用一级考试win10,2016年计算机一级考试试题「Windows」
- 51nod 2600 小Biu的旅行
- 程序员soul 012期|妹子|重庆
- 如何快速定位到网页中某些内容的代码位置