安卓简易计算器
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="6"
android:columnCount="4" >
<TextView
android:id="@+id/Result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:layout_marginLeft="4px"
android:gravity="left"
android:text="0"
android:textSize="50dip"/>
<Button
android:id="@+id/clear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_columnSpan="4"
android:text="清除"
android:textSize="26sp" />
<Button android:id="@+id/num1" android:text="1" android:textSize="26sp" />
<Button android:id="@+id/num2" android:text="2" android:textSize="26sp" />
<Button android:id="@+id/num3" android:text="3" android:textSize="26sp" />
<Button android:id="@+id/plus" android:text="+" android:textSize="26sp" />
<Button android:id="@+id/num4" android:text="4" android:textSize="26sp" />
<Button android:id="@+id/num5" android:text="5" android:textSize="26sp" />
<Button android:id="@+id/num6" android:text="6" android:textSize="26sp" />
<Button android:id="@+id/subtract" android:text="-" android:textSize="26sp" />
<Button android:id="@+id/num7" android:text="7" android:textSize="26sp" />
<Button android:id="@+id/num8" android:text="8" android:textSize="26sp" />
<Button android:id="@+id/num9" android:text="9" android:textSize="26sp" />
<Button android:id="@+id/multiply" android:text="*" android:textSize="26sp" />
<Button android:id="@+id/point" android:text="." android:textSize="26sp" />
<Button android:id="@+id/num0" android:text="0" android:textSize="26sp" />
<Button android:id="@+id/equal" android:text="=" android:textSize="26sp" />
<Button android:id="@+id/divide" android:text="/" android:textSize="26sp" />
</GridLayout>
MainActivity.java
package com.example.tlj;
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 Button[] btnNum = new Button[11];// 数值按钮,用数组存储
private Button[] btnOperator = new Button[5];// 符号按钮,用数组存储
private TextView textView = null;// 显示区域
private Button btnClear = null; // clear按钮
private static String operator; // 用于保存运算符
private boolean clearFlag; // 用于判断是否清空显示区域的值,true需要,false不需要
private boolean firstFlag; // 用于判断是否是首次输入,true首次,false不是首次
private double result; // 计算结果
public MainActivity() {
// 初始化各项值
result = 0; // x的值
firstFlag = true; // 是首次运算
clearFlag = false; // 不需要清空
operator = "="; // 运算符
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取运算符
btnOperator[0] = (Button) findViewById(R.id.plus);
btnOperator[1] = (Button) findViewById(R.id.subtract);
btnOperator[2] = (Button) findViewById(R.id.multiply);
btnOperator[3] = (Button) findViewById(R.id.divide);
btnOperator[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);
// 初始化显示结果区域
textView=(TextView) findViewById(R.id.Result);
textView.setText("0.0");
// 实例化监听器对象
NumberAction na = new NumberAction();
OperatorAction oa = new OperatorAction();
for (Button bc : btnOperator) {
bc.setOnClickListener((View.OnClickListener) oa);
}
for (Button bc : btnNum) {
bc.setOnClickListener((View.OnClickListener) na);
}
// clear按钮的动作
btnClear = (Button) findViewById(R.id.clear);
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText("0.0");
// 初始化各项值
result = 0; // x的值
firstFlag = true; // 是首次运算
clearFlag = false; // 不需要清空
operator = "="; // 运算符
}
});
}
//数字按钮监听器
private class NumberAction implements View.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 (textView.getText().toString().equals("0.0")) {
textView.setText("");
}
firstFlag = false;// 改变是否首次输入的标记值
} else {
String textViewStr = textView.getText().toString();
// 判断显示区域的值里面是否已经有".",如果有,输入的又是".",就什么都不做
if (textViewStr.indexOf(".") != -1 && input.equals(".")) {
return;
}
// 判断显示区域的值里面只有"-",输入的又是".",就什么都不做
if (textViewStr.equals("-") && input.equals(".")) {
return;
}
// 判断显示区域的值如果是"0",输入的不是".",就什么也不做
if (textViewStr.equals("0") && !input.equals(".")) {
return;
}
}
// 如果我点击了运算符以后,再输入数字的话,就要清空显示区域的值
if (clearFlag) {
textView.setText("");
clearFlag = false;// 还原初始值,不需要清空
}
textView.setText(textView.getText().toString() + input);// 设置显示区域的值
}
}
//符号按钮监听器
private class OperatorAction implements View.OnClickListener {
@Override
public void onClick(View view) {
Button btn = (Button) view;
String inputOperator = (String) btn.getText();
if (firstFlag) {// 首次输入"-"的情况
if (inputOperator.equals("-")) {
textView.setText("-");// 显示区域的内容设置为"-"
firstFlag = false;// 改变首次输入的标记
}
} else {
if (!clearFlag) {// 如果flag=false不需要清空显示区的值,就调用方法计算
calculate(Double.parseDouble(textView.getText().toString()));// 保存显示区域的值,并计算
}
// 保存你点击的运算符
operator = inputOperator;
clearFlag = true;// 因为我这里已经输入过运算符,
}
}
}
// 计算用的方法
public void calculate(double x) {
if (operator.equals("+")) {
result += x;
} else if (operator.equals("-")) {
result -= x;
} else if (operator.equals("*")) {
result *= x;
} else if (operator.equals("/")) {
result /= x;
} else if (operator.equals("=")) {
result = x;
}
textView.setText("" + result);
}
}
运行结果
1+1.5=2.5
清除
3-0.8=2.2
5-3=2
0/4=0
开发日志
这是安卓第一次作业,我按照课本先把布局完成,书上的组件都没有加上id,所以我都自行补充了。然后就剩下Java文件了,我上网参考了相关资料,并且进行学习与理解。基本思路就是声明定义各组件并且为之设置监听器,获取内容并且赋予计算方法。
第一次运行,结果因为电脑配置太低开不了虚拟化技术而用不了模拟器,上网搜了可以不开虚拟化技术的模拟器结果都不可以,这过程真的太坎坷了。