android写一个计算器程序代码
时间: 2023-08-04 16:33:57 浏览: 110
以下是一个简单的 Android 计算器程序的代码示例,仅供参考:
activity_main.xml 布局文件:
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:textSize="24sp" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4"
android:rowCount="5"
android:padding="16dp">
<Button
android:id="@+id/button_7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="7" />
<Button
android:id="@+id/button_8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="8" />
<Button
android:id="@+id/button_9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="9" />
<Button
android:id="@+id/button_divide"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="/" />
<Button
android:id="@+id/button_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="4" />
<Button
android:id="@+id/button_5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="5" />
<Button
android:id="@+id/button_6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="6" />
<Button
android:id="@+id/button_multiply"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="*" />
<Button
android:id="@+id/button_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="1" />
<Button
android:id="@+id/button_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="2" />
<Button
android:id="@+id/button_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="3" />
<Button
android:id="@+id/button_minus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="-" />
<Button
android:id="@+id/button_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnSpan="2"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="C" />
<Button
android:id="@+id/button_0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="0" />
<Button
android:id="@+id/button_dot"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="." />
<Button
android:id="@+id/button_add"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="+" />
<Button
android:id="@+id/button_equals"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnSpan="2"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="=" />
</GridLayout>
</LinearLayout>
```
MainActivity.java 文件:
```java
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.math.BigDecimal;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mResultView;
private boolean mIsOperatorClicked = false;
private String mOperator = "";
private BigDecimal mFirstNumber = BigDecimal.ZERO;
private BigDecimal mSecondNumber = BigDecimal.ZERO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取 TextView 对象
mResultView = findViewById(R.id.result);
// 获取数字按钮对象并设置点击事件监听器
findViewById(R.id.button_0).setOnClickListener(this);
findViewById(R.id.button_1).setOnClickListener(this);
findViewById(R.id.button_2).setOnClickListener(this);
findViewById(R.id.button_3).setOnClickListener(this);
findViewById(R.id.button_4).setOnClickListener(this);
findViewById(R.id.button_5).setOnClickListener(this);
findViewById(R.id.button_6).setOnClickListener(this);
findViewById(R.id.button_7).setOnClickListener(this);
findViewById(R.id.button_8).setOnClickListener(this);
findViewById(R.id.button_9).setOnClickListener(this);
// 获取运算符按钮对象并设置点击事件监听器
findViewById(R.id.button_add).setOnClickListener(this);
findViewById(R.id.button_minus).setOnClickListener(this);
findViewById(R.id.button_multiply).setOnClickListener(this);
findViewById(R.id.button_divide).setOnClickListener(this);
// 获取其他按钮对象并设置点击事件监听器
findViewById(R.id.button_clear).setOnClickListener(this);
findViewById(R.id.button_dot).setOnClickListener(this);
findViewById(R.id.button_equals).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_0:
case R.id.button_1:
case R.id.button_2:
case R.id.button_3:
case R.id.button_4:
case R.id.button_5:
case R.id.button_6:
case R.id.button_7:
case R.id.button_8:
case R.id.button_9:
case R.id.button_dot:
// 点击数字或小数点按钮
handleNumberClick(((Button) v).getText().toString());
break;
case R.id.button_add:
case R.id.button_minus:
case R.id.button_multiply:
case R.id.button_divide:
// 点击加、减、乘、除按钮
handleOperatorClick(((Button) v).getText().toString());
break;
case R.id.button_clear:
// 点击清空按钮
handleClearClick();
break;
case R.id.button_equals:
// 点击等于按钮
handleEqualsClick();
break;
}
}
/**
* 处理数字或小数点按钮的点击事件
*/
private void handleNumberClick(String number) {
if (mIsOperatorClicked) {
// 如果之前点击了运算符,则清空显示屏上的内容
mResultView.setText("");
mIsOperatorClicked = false;
}
// 在显示屏上追加数字或小数点
mResultView.append(number);
}
/**
* 处理加、减、乘、除按钮的点击事件
*/
private void handleOperatorClick(String operator) {
if (!mIsOperatorClicked) {
// 如果之前未点击运算符,则将当前显示屏上的数字作为第一个操作数
mFirstNumber = new BigDecimal(mResultView.getText().toString());
mOperator = operator;
mIsOperatorClicked = true;
}
}
/**
* 处理清空按钮的点击事件
*/
private void handleClearClick() {
mResultView.setText("");
mFirstNumber = BigDecimal.ZERO;
mSecondNumber = BigDecimal.ZERO;
mIsOperatorClicked = false;
mOperator = "";
}
/**
* 处理等于按钮的点击事件
*/
private void handleEqualsClick() {
if (mIsOperatorClicked) {
// 如果之前点击了运算符,则不进行任何操作
return;
}
// 将当前显示屏上的数字作为第二个操作数
mSecondNumber = new BigDecimal(mResultView.getText().toString());
BigDecimal result = BigDecimal.ZERO;
switch (mOperator) {
case "+":
result = mFirstNumber.add(mSecondNumber);
break;
case "-":
result = mFirstNumber.subtract(mSecondNumber);
break;
case "*":
result = mFirstNumber.multiply(mSecondNumber);
break;
case "/":
if (mSecondNumber.equals(BigDecimal.ZERO)) {
mResultView.setText("Error");
return;
}
result = mFirstNumber.divide(mSecondNumber, 10, BigDecimal.ROUND_HALF_UP);
break;
}
// 在显示屏上显示结果
mResultView.setText(result.toPlainString());
mFirstNumber = result;
mSecondNumber = BigDecimal.ZERO;
mIsOperatorClicked = false;
mOperator = "";
}
}
```
这个示例只是一个简单的计算器程序,还有很多需要完善和优化的地方,例如输入错误处理、小数点精度控制、界面美化和多语言支持等。希望这个示例能够帮助您入门 Android 开发。
阅读全文