Android实验:
请实现一个Android平台上的计算器APP,计算器的功能参照Windows的计算器标准版。
实验工具:Eclipse环境
其中两个实现文件:
1. activity_main.xml
2. MainActivity.java
注意:这里实现的是两个数的操作
源文件如下:
(1)activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:height="80dp"
android:textSize="30sp" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_cle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:onClick="onClick"
android:text="CLEAR" />
<Button
android:id="@+id/btn_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:onClick="onClick"
android:text="←" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="7" />
<Button
android:id="@+id/btn_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="8" />
<Button
android:id="@+id/btn_9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="9" />
<Button
android:id="@+id/btn_div"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="÷" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="4" />
<Button
android:id="@+id/btn_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="5" />
<Button
android:id="@+id/btn_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="6" />
<Button
android:id="@+id/btn_mul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="×" />
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="1" />
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="2" />
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="3" />
<Button
android:id="@+id/btn_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="-" />
</TableRow>
<TableRow
android:id="@+id/tableRow5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="." />
<Button
android:id="@+id/btn_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="0" />
<Button
android:id="@+id/btn_equ"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="=" />
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="+" />
</TableRow>
</TableLayout>
</LinearLayout>
(2) MainActivity.java
package com.example.calculation;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView;
private String str;
private String num1;
private String num2;
private double result;
private boolean addNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
addNum = true;
}
// 注册点击事件——单击一下就调用一下getResult函数
public void onClick(View v){ // v获取的是控件的id号
str = (String) textView.getText();
switch (v.getId()) {
case R.id.btn_cle:
textView.setText(""); //清空
break;
case R.id.btn_del:
if(!str.equals("") && str != null){
textView.setText(str.substring(0, str.length()-1)); // 裁剪字符
}
break;
case R.id.btn_equ:
if(str.contains("+")){
getResult(num1, num2, "+");
}
else if(str.contains("-")){
getResult(num1, num2, "-");
}
else if(str.contains("×")){
getResult(num1, num2, "×");
}
else if(str.contains("÷")){
getResult(num1, num2, "÷");
}
else {
return;
}
break;
case R.id.btn_add:
case R.id.btn_sub:
case R.id.btn_mul:
case R.id.btn_div:
if (str.contains("+")||str.contains("-")||str.contains("×")||str.contains("÷"))
return; // 防止出现多个符号
else // 只出现一个符号
textView.setText(str+((Button)v).getText()); //在原来的基础上添加符号
if(!addNum) // 不能添加数字的话,改为可以添加数字
addNum = true;
break;
default: // 点击的是数字或者是小数点
/*
1.未运算出结果,处于运算过程中
2. 运算出结果,然后输出的数字直接替换原来的result,开始新的运行)
*/
if (addNum) {
textView.setText(str+((Button)v).getText()); //在原来的基础上添加数字
}else{
textView.setText(((Button)v).getText());
addNum = true;
}
break;
}
}
private void getResult(String num1, String num2,String op) { //op是符号
num1 = str.substring(0,str.indexOf(op));
num2 = str.substring(str.indexOf(op)+1);
try {
// 转换类型
double n1 = Double.parseDouble(num1);
double n2 = Double.parseDouble(num2);
if (op.equals("+")) {
result = n1+n2;
}else if(op.equals("-")){
result = n1-n2;
}else if(op.equals("×")){
result = n1*n2;
}else if(op.equals("÷")){
result = n1/n2;
}else {
return;
}
String r = result+""; // 数据类型转换
//由于result是double类型,因此我们要做出一些处理,如:5+7=12.0 截取为 12
if(r.contains(".")&&r.substring(r.length()-1).equals("0")){
r = r.substring(0,r.indexOf("."));
}
textView.setText(r);
addNum = false; //运算结束后再点击数,就进行click函数的 default —— else 操作
} catch (Exception e) {
return;
}
}
}
运行效果: