温馨提示  2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。存档数据
知识 2023-12-06 32 次阅读

安卓开发:如何构建简单的计算器应用?

安卓开发简单的计算器app
想要开发一个简单的安卓计算器app吗?跟着我来看看吧!首先,我们需要了解安卓开发的基本知识,如Java编程语言和安卓 Studio开发环境。然后,我们可创建一个新的安卓项目,并在界面中添加一个按钮和一个文本框。当用户点击按钮时,我们将弹出一个对话框显示输入的数字和运算符,并使用安卓提供的数学函数进行计算。最后,我们将结果显示在文本框中。这个简单的安卓计算器app可以帮助你学习安卓开发的基础知识,并提高你的编程技能。

计算器是手机上的基础应用之一,为方便用户使用,我们可开发一款简单的安卓计算器应用。本文将介绍安卓计算器开发的原理和详细步骤。

开发计算器的步骤如下

1. 创建一个新的安卓项目,为项目定义名称、包名以及其他属性。

2. 创建布局文件 activity,main.xml, 在该文件中使用 RelativeLayout 布局,设置 TextView 显示运算表达式和计算结果,通过布局实现计算器的各个按键。

3. 方法一通过代码实现计算器按键的逻辑功能。在 MainActivity.java 文件中,为每个按键设置相应的监听器,分别处理不同的按键事件。通过回调函数获取按键信息,实现对应的数学运算,最终显示运算结果。

```java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private TextView formulaText, resultText;

private boolean isFirst = true; // 是否计算的第一个数

private boolean isError = false; // 是否输入错误

private boolean isCounted = false; // 是否按等号计算

private float num1 = 0.0f; // 第一个数

private float num2 = 0.0f; // 第二个数

private String operator = ; // 运算符

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity,main);

// 初始化控件

formulaText = findViewById(R.id.formulaText);

resultText = findViewById(R.id.resultText);

// 为按键设置监听器

findViewById(R.id.oneBtn).setOnClickListener(this);

findViewById(R.id.twoBtn).setOnClickListener(this);

findViewById(R.id.threeBtn).setOnClickListener(this);

// ...... 其他按键同理

findViewById(R.id.plusBtn).setOnClickListener(this);

findViewById(R.id.minusBtn).setOnClickListener(this);

findViewById(R.id.multiplyBtn).setOnClickListener(this);

findViewById(R.id.divideBtn).setOnClickListener(this);

findViewById(R.id.clearBtn).setOnClickListener(this);

findViewById(R.id.equalBtn).setOnClickListener(this);

findViewById(R.id.dotBtn).setOnClickListener(this);

}

@Override

public void onClick(View v) {

int key = v.getId();

if(isError) { // 如果输入式子有误,直接返回

Toast.makeText(this, Input Error!, Toast.LENGTH,SHORT).show();

return;

}

switch(key) {

case R.id.oneBtn:

addCharToFormula(1);

break;

case R.id.twoBtn:

addCharToFormula(2);

break;

case R.id.threeBtn:

addCharToFormula(3);

break;

// ...... 其他按键同理

case R.id.plusBtn:

setOperator(+);

break;

case R.id.minusBtn:

setOperator(-);

break;

case R.id.multiplyBtn:

setOperator(*);

break;

case R.id.divideBtn:

setOperator(/);

break;

case R.id.dotBtn:

addDot();

break;

case R.id.clearBtn:

clear();

break;

case R.id.equalBtn:

calculate();

break;

}

}

private void addCharToFormula(String ch) {

if(isCounted) {

clear();

isCounted = false;

}

if(isFirst) {

resultText.setText(ch);

isFirst = false;

} else {

resultText.append(ch);

}

formulaText.append(ch);

}

private void setOperator(String op) {

if(isFirst) {

Toast.makeText(this, Input error!, Toast.LENGTH,SHORT).show();

isError = true;

return;

}

operator = op;

isFirst = true;

formulaText.append(op);

}

private void addDot() {

if(isFirst) {

isFirst = false;

resultText.setText(0.);

formulaText.append(0.);

} else {

String str = resultText.getText().toString();

if(str.indexOf(.) == -1) {

resultText.append(.);

formulaText.append(.);

}

}

}

private void clear() {

resultText.setText(0);

formulaText.setText();

isFirst = true;

isError = false;

isCounted = false;

num1 = 0.0f;

num2 = 0.0f;

operator = ;

}

private void calculate() {

if(isFirst) {

Toast.makeText(this, 输入出错, Toast.LENGTH,SHORT).show();

isError = true;

return;

}

num2 = Float.parseFloat(resultText.getText().toString().trim());

float result = 0.0f;

switch(operator) {

case +:

result = num1 + num2;

break;

case -:

result = num1 - num2;

break;

case *:

result = num1 * num2;

break;

case /:

if(num2 == 0.0f) {

Toast.makeText(this, 输入出错, Toast.LENGTH,SHORT).show();

isError = true;

return;

}

result = num1 / num2;

break;

}

resultText.setText(String.valueOf(result));

formulaText.append(=+String.valueOf(result));

num1 = result;

num2 = 0.0f;

isCounted = true;

isFirst = true;

}

}

```

4. 方法二使用表达式计算器库 ExpressionEval,简单实现计算器的功能。在 gradle 文件中引入该库,使用该库计算表达式的值并在 TextView 中显示。

```java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private TextView formulaText, resultText;

private String currentFormula = ; // 当前运算表达式

private String currentResult = ; // 当前运算结果

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity,main);

formulaText = findViewById(R.id.formulaText);

resultText = findViewById(R.id.resultText);

// 为按键设置监听器

findViewById(R.id.oneBtn).setOnClickListener(this);

findViewById(R.id.twoBtn).setOnClickListener(this);

findViewById(R.id.threeBtn).setOnClickListener(this);

// ...... 其他按键同理

findViewById(R.id.plusBtn).setOnClickListener(this);

findViewById(R.id.minusBtn).setOnClickListener(this);

findViewById(R.id.multiplyBtn).setOnClickListener(this);

findViewById(R.id.divideBtn).setOnClickListener(this);

findViewById(R.id.clearBtn).setOnClickListener(this);

findViewById(R.id.equalBtn).setOnClickListener(this);

findViewById(R.id.dotBtn).setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch(v.getId()) {

case R.id.oneBtn:

addCharToFormula(1);

break;

case R.id.twoBtn:

addCharToFormula(2);

break;

case R.id.threeBtn:

addCharToFormula(3);

break;

// ...... 其他按键同理

case R.id.plusBtn:

addCharToFormula(+);

break;

case R.id.minusBtn:

addCharToFormula(-);

break;

case R.id.multiplyBtn:

addCharToFormula(*);

break;

case R.id.divideBtn:

addCharToFormula(/);

break;

case R.id.dotBtn:

addCharToFormula(.);

break;

case R.id.clearBtn:

clear();

break;

case R.id.equalBtn:

calculate();

break;

}

}

private void addCharToFormula(String ch) {

String str = formulaText.getText().toString().trim();

formulaText.setText(str+ch);

currentFormula += ch;

calculate();

}

private void clear() {

formulaText.setText();

resultText.setText();

currentFormula = ;

currentResult = ;

}

private void calculate() {

try {

currentResult = new Expression(currentFormula).eval().toPlainString();

resultText.setText(currentResult);

} catch (Exception e) {

resultText.setText();

}

}

}

```

以上两种实现方法,都可以简单实现一款安卓计算器应用,读者能够依据自己的需要选择适合自己的方法实现。