1. 项目概述
最近在整理Android开发学习笔记时,发现很多初学者都会选择"计算器"作为第一个练手项目。这个看似简单的应用实际上涵盖了Android开发的多个核心知识点。今天我就来分享一个使用Android Studio开发基础计算器的完整实现过程,适合刚入门Android开发的朋友参考。
这个计算器将实现加减乘除四则运算,包含数字输入、运算符选择和结果显示等基本功能。通过这个项目,可以掌握Android Studio的基本使用、UI布局设计、事件处理等必备技能。下面我会从环境搭建开始,逐步讲解每个实现环节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境准备
2.1 Android Studio安装与配置
首先需要安装Android Studio,这是Google官方推荐的Android开发IDE。建议从官网下载最新稳定版本(当前是2023.3.1)。安装过程中注意以下几点:
- JDK版本选择:Android Studio自带OpenJDK,但也可以使用本地安装的JDK 11或17
- SDK组件选择:至少需要安装Android SDK Platform和对应的系统镜像
- 性能优化:在gradle.properties中添加以下配置可加快构建速度:
code复制org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
2.2 创建新项目
打开Android Studio后,选择"New Project",然后选择"Empty Activity"模板。项目配置需要注意:
- 应用名称:SimpleCalculator
- 包名:com.example.calculator(建议使用自己的域名反向)
- 语言:Java(虽然Kotlin现在更流行,但Java更适合初学者理解)
- 最低API级别:建议选择API 26(Android 8.0)以覆盖大多数设备
3. UI界面设计
3.1 布局文件编写
在res/layout/activity_main.xml中设计计算器界面。我们使用LinearLayout嵌套GridLayout来实现:
xml复制<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/resultView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="32sp"
android:gravity="right"
android:editable="false"/>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4">
<!-- 数字和运算符按钮 -->
<Button
android:id="@+id/btn7"
android:text="7"
style="@style/CalcButton"/>
<!-- 其他按钮类似 -->
</GridLayout>
</LinearLayout>
3.2 样式优化
在res/values/styles.xml中定义统一的按钮样式:
xml复制<style name="CalcButton">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_columnWeight">1</item>
<item name="android:layout_margin">4dp</item>
<item name="android:textSize">24sp</item>
</style>
4. 业务逻辑实现
4.1 MainActivity类结构
在MainActivity.java中,我们需要定义以下成员变量:
java复制private EditText resultView;
private String currentNumber = "";
private String operation = "";
private double firstOperand = 0;
private boolean isNewOperation = true;
4.2 数字按钮处理
为数字按钮设置统一的点击监听器:
java复制View.OnClickListener numberListener = v -> {
Button button = (Button)v;
if(isNewOperation) {
currentNumber = button.getText().toString();
isNewOperation = false;
} else {
currentNumber += button.getText().toString();
}
resultView.setText(currentNumber);
};
4.3 运算符处理
运算符按钮需要特殊处理:
java复制View.OnClickListener operatorListener = v -> {
Button button = (Button)v;
if(!currentNumber.isEmpty()) {
firstOperand = Double.parseDouble(currentNumber);
}
operation = button.getText().toString();
currentNumber = "";
};
4.4 等于按钮实现
计算结果的核心逻辑:
java复制btnEquals.setOnClickListener(v -> {
if(!currentNumber.isEmpty() && !operation.isEmpty()) {
double secondOperand = Double.parseDouble(currentNumber);
double result = 0;
switch(operation) {
case "+":
result = firstOperand + secondOperand;
break;
case "-":
result = firstOperand - secondOperand;
break;
case "×":
result = firstOperand * secondOperand;
break;
case "÷":
if(secondOperand != 0) {
result = firstOperand / secondOperand;
}
break;
}
resultView.setText(String.valueOf(result));
currentNumber = String.valueOf(result);
isNewOperation = true;
}
});
5. 功能扩展与优化
5.1 添加清除功能
实现清除按钮(C)和全部清除(AC)功能:
java复制btnClear.setOnClickListener(v -> {
currentNumber = "";
resultView.setText("0");
});
btnAllClear.setOnClickListener(v -> {
currentNumber = "";
firstOperand = 0;
operation = "";
resultView.setText("0");
isNewOperation = true;
});
5.2 小数点处理
添加小数点按钮支持:
java复制btnDecimal.setOnClickListener(v -> {
if(!currentNumber.contains(".")) {
currentNumber += ".";
resultView.setText(currentNumber);
}
});
5.3 错误处理
增加除零错误和其他异常处理:
java复制try {
// 计算逻辑
} catch (Exception e) {
resultView.setText("Error");
currentNumber = "";
isNewOperation = true;
}
6. 测试与调试
6.1 单元测试
为关键计算方法编写单元测试:
java复制@Test
public void testAddition() {
Calculator calculator = new Calculator();
assertEquals(5.0, calculator.calculate(2.0, 3.0, "+"), 0.001);
}
6.2 界面测试
使用Espresso进行界面测试:
java复制@RunWith(AndroidJUnit4.class)
public class CalculatorTest {
@Rule
public ActivityScenarioRule<MainActivity> activityRule =
new ActivityScenarioRule<>(MainActivity.class);
@Test
public void testButtonClick() {
onView(withId(R.id.btn7)).perform(click());
onView(withId(R.id.resultView)).check(matches(withText("7")));
}
}
7. 常见问题解决
7.1 按钮点击无响应
可能原因及解决方案:
- 忘记设置点击监听器 - 确保所有按钮都设置了OnClickListener
- ID不匹配 - 检查xml中的id与代码中引用的id是否一致
- 布局层次问题 - 确保按钮没有被其他视图遮挡
7.2 计算结果不准确
调试技巧:
- 打印中间变量值,确认运算数和运算符是否正确
- 检查数据类型转换,特别是字符串与数字的转换
- 验证运算符逻辑,特别是除法中的零值检查
7.3 内存泄漏问题
预防措施:
- 使用弱引用或静态内部类处理长时间运行的任务
- 在onDestroy中释放资源和解注册监听器
- 使用Android Profiler监控内存使用情况
8. 项目优化建议
8.1 代码重构
将计算逻辑抽离到单独的Calculator类:
java复制public class Calculator {
public double calculate(double a, double b, String op) {
// 计算逻辑
}
}
8.2 添加科学计算功能
扩展功能建议:
- 平方根、幂运算
- 三角函数计算
- 对数运算
- 百分比计算
8.3 界面美化
改进建议:
- 使用Material Design组件
- 添加主题切换功能
- 实现按钮按下效果
- 优化横竖屏布局
这个简单的计算器项目虽然基础,但涵盖了Android开发的许多核心概念。通过这个项目,可以掌握Activity生命周期、UI布局、事件处理等基础知识,为进一步学习更复杂的Android开发打下坚实基础。
