标签:
2014年12月1日15:42:10
by tops
主布局使用LinearLayout,走向为垂直
使用TextView当作显示屏,显示计算结果
使用TableLayout当作输入表格
TableRow是每一行,其中包含四个按键
善用IDE的视图来设计布局也是很节省时间的
加减乘除的英语单词
找到TextView,给按钮直接添加setOnClickListener事件
在MainActivity中实现监听接口并复写onClick方法,在方法里使用switch id的方法判断点击的是哪个按钮;
使用数组或栈记录输入的数字和运算符,当输入第四个运算符时就先计算前面的算式为结果,再计算后面输入的。
创建一个Item类,用来表示数字或运算符,数组就放Item为元素;
当点击数字按键的时候给TextView.append数字,点击加减乘除计算时从TextView.getText并转换为数字,转换为Item类添加到数组中;
然后调用检查并计算的方法
如果数组元素大于3,判断数组中第二个元素是什么运算符,再获取第一个元素和第三个元素作为计算数字进行计算。这时清空数组。
当计算完毕之后将计算结果添加到数组第一个元素。
那么计算小数和计算结果为整数时不要显示小数点都应该优化,思考一下
注:另外一种计算方式就是将输入的内容搞成一个数组,然后在点击等号的时候才开始计算。
本例的缺点是没有回删键,比如输入错了可以往前删一个数字或运算符。
/Calculator/src/com/tops/calculator/MainActivity.java
/**** 10+20-8=**/package com.tops.calculator;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private TextView tvScreen;private List items = new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 第一步,寻找控件并给按钮添加监听事件tvScreen = (TextView) findViewById(R.id.tvScreen);findViewById(R.id.btn0).setOnClickListener(this);findViewById(R.id.btn1).setOnClickListener(this);findViewById(R.id.btn2).setOnClickListener(this);findViewById(R.id.btn3).setOnClickListener(this);findViewById(R.id.btn4).setOnClickListener(this);findViewById(R.id.btn5).setOnClickListener(this);findViewById(R.id.btn6).setOnClickListener(this);findViewById(R.id.btn7).setOnClickListener(this);findViewById(R.id.btn8).setOnClickListener(this);findViewById(R.id.btn9).setOnClickListener(this);findViewById(R.id.btnX).setOnClickListener(this);findViewById(R.id.btnAdd).setOnClickListener(this);findViewById(R.id.btnSub).setOnClickListener(this);findViewById(R.id.btnResult).setOnClickListener(this);findViewById(R.id.btnClear).setOnClickListener(this);findViewById(R.id.btnDiv).setOnClickListener(this);}/*** 复写OnClickListener接口的onClick方法,用来判断输入*/@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn0:tvScreen.append("0");break;case R.id.btn1:tvScreen.append("1");break;case R.id.btn2:tvScreen.append("2");break;case R.id.btn3:tvScreen.append("3");break;case R.id.btn4:tvScreen.append("4");break;case R.id.btn5:tvScreen.append("5");break;case R.id.btn6:tvScreen.append("6");break;case R.id.btn7:tvScreen.append("7");break;case R.id.btn8:tvScreen.append("8");break;case R.id.btn9:tvScreen.append("9");break;// 点击加号按钮case R.id.btnAdd:// 给数组添加数字元素items.add(new Item(Double.parseDouble(tvScreen.getText().toString()), Types.NUM));// 检查是否可以计算,如果可以则进行计算checkAndCompute();// 给数组添加加号运算符items.add(new Item(0, Types.ADD));// 清空显示屏tvScreen.setText("");break;case R.id.btnSub:items.add(new Item(Double.parseDouble(tvScreen.getText().toString()), Types.NUM));checkAndCompute();items.add(new Item(0, Types.SUB));tvScreen.setText("");break;case R.id.btnX:items.add(new Item(Double.parseDouble(tvScreen.getText().toString()), Types.NUM));checkAndCompute();items.add(new Item(0, Types.X));tvScreen.setText("");break;case R.id.btnDiv:items.add(new Item(Double.parseDouble(tvScreen.getText().toString()), Types.NUM));checkAndCompute();items.add(new Item(0, Types.DIV));tvScreen.setText("");break;// 点击清楚屏幕按钮,显示屏清空,计算的数组清空case R.id.btnClear:tvScreen.setText("");items.clear();break;// 点击等号按钮,计算并显示结果,数组清空case R.id.btnResult:items.add(new Item(Double.parseDouble(tvScreen.getText().toString()), Types.NUM));checkAndCompute();tvScreen.setText(items.get(0).value + "");items.clear();break;}}/*** 检查数组的内容是否可以计算,如果可以就计算*/public void checkAndCompute() {if (items.size() >= 3) {double a = items.get(0).value;double b = items.get(2).value;int opt = items.get(1).type;items.clear();switch (opt) {case Types.ADD:items.add(new Item(a + b, Types.NUM));break;case Types.SUB:items.add(new Item(a - b, Types.NUM));break;case Types.X:items.add(new Item(a * b, Types.NUM));break;case Types.DIV:items.add(new Item(a / b, Types.NUM));break;}}}@Overridepublic 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;}}
/Calculator/src/com/tops/calculator/Item.java
package com.tops.calculator;public class Item {public Item(double value,int type) {this.value= value;this.type=type;}public double value = 0;public int type = 0;}
/Calculator/src/com/tops/calculator/Types.java
package com.tops.calculator;public class Types {public static final int ADD = 1;public static final int SUB = 2;public static final int X = 3;public static final int DIV = 4;public static final int NUM = 5;}
/Calculator/res/layout/activity_main.xml
xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" >android:id="@+id/tvScreen"android:layout_width="match_parent"android:layout_height="wrap_content"android:text=""android:gravity="right"android:textAppearance="?android:attr/textAppearanceLarge" />android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1" >android:layout_width="fill_parent"android:layout_height="wrap_content" >android:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="1" />android:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="2" />android:id="@+id/btn3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="3" />android:id="@+id/btnAdd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="+" />android:layout_width="fill_parent"android:layout_height="wrap_content" >android:id="@+id/btn4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="4" />android:id="@+id/btn5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="5" />android:id="@+id/btn6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="6" />android:id="@+id/btnSub"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="-" />android:layout_width="fill_parent"android:layout_height="wrap_content" >android:id="@+id/btn7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="7" />android:id="@+id/btn8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="8" />android:id="@+id/btn9"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="9" />android:id="@+id/btnX"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="*" />android:layout_width="fill_parent"android:layout_height="wrap_content" >android:id="@+id/btnClear"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="C" />android:id="@+id/btn0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="0" />android:id="@+id/btnResult"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="=" />android:id="@+id/btnDiv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="/" />
标签:
原文地址:http://www.cnblogs.com/tops/p/4189202.html