1. 项目概述最近在整理Android开发学习笔记时发现很多初学者都会从计算器这个小项目开始练手。这确实是个不错的入门选择——功能明确、交互简单又能涵盖Android开发的核心知识点。今天我就来分享一下如何用Android Studio从零开始实现一个具备基础运算功能的计算器应用。这个项目虽然看起来简单但完整实现下来会涉及Android基础UI组件使用事件处理机制数据验证与异常处理基础算法实现状态管理等核心概念2. 开发环境准备2.1 Android Studio安装配置首先需要安装最新版的Android Studio当前稳定版为2023.2.1。安装时注意勾选以下组件Android SDK Platform最新版本Android EmulatorAndroid SDK Tools安装完成后建议进行以下配置优化修改Gradle镜像源为国内镜像如阿里云调整虚拟机配置为x86_64架构设置合适的JDK路径推荐JDK17提示初次启动时SDK下载可能较慢建议提前准备好稳定的网络环境2.2 创建新项目使用Empty Activity模板创建项目注意以下关键配置项应用名称SimpleCalculator包名com.example.calculator最低API级别建议API 24Android 7.0语言Kotlin构建配置语言Kotlin DSL创建完成后建议立即执行以下操作更新Gradle插件版本同步项目依赖运行空白应用测试环境是否正常3. UI界面设计3.1 布局文件编写在res/layout/activity_main.xml中使用ConstraintLayout构建计算器界面。主要包含1个TextView用于显示输入和结果16个Button分别对应数字0-9和运算符( - × ÷ C)关键布局代码示例TextView android:idid/tvDisplay android:layout_widthmatch_parent android:layout_heightwrap_content app:layout_constraintTop_toTopOfparent android:textSize32sp android:gravityend android:padding16dp/ Button android:idid/btn7 android:layout_width0dp android:layout_height0dp android:text7 app:layout_constraintWidth_percent0.25 app:layout_constraintDimensionRatio1:1 app:layout_constraintTop_toBottomOfid/tvDisplay app:layout_constraintStart_toStartOfparent/3.2 样式优化建议为使计算器更美观可以创建res/values/colors.xml定义主题色添加按钮按下状态效果设置运算符按钮特殊颜色添加圆角边框效果推荐使用Material组件实现现代化UIimplementation com.google.android.material:material:1.9.04. 业务逻辑实现4.1 事件处理机制在MainActivity.kt中实现View.OnClickListener接口处理按钮点击class MainActivity : AppCompatActivity(), View.OnClickListener { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 为所有按钮设置点击监听 listOf( binding.btn0, binding.btn1, binding.btn2, binding.btnPlus, binding.btnMinus, binding.btnEqual, binding.btnClear ).forEach { it.setOnClickListener(this) } } override fun onClick(v: View?) { when(v?.id) { R.id.btn0 - appendNumber(0) R.id.btnPlus - setOperator() // 其他按钮处理... } } }4.2 计算核心算法实现计算逻辑的关键点使用两个变量存储运算数和当前运算符处理连续运算的情况处理除零错误等异常情况核心计算函数示例private fun calculate(): Double { val num2 binding.tvDisplay.text.toString().toDouble() return when(currentOperator) { - storedNumber num2 - - storedNumber - num2 × - storedNumber * num2 ÷ - { if(num2 0.0) throw ArithmeticException() storedNumber / num2 } else - num2 } }5. 功能增强与优化5.1 添加高级功能基础功能完成后可以考虑扩展添加小数点支持实现退格功能添加百分比计算支持正负号切换小数点处理示例private fun appendDecimal() { val currentText binding.tvDisplay.text.toString() if(!currentText.contains(.)) { binding.tvDisplay.append(.) } }5.2 状态保存与恢复重写onSaveInstanceState保存计算状态override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putDouble(storedNumber, storedNumber) outState.putString(operator, currentOperator) }6. 常见问题解决6.1 典型问题排查按钮点击无响应检查是否设置了OnClickListener确认按钮ID在布局和代码中一致计算结果不准确检查运算符优先级处理验证数字转换是否正确界面显示异常检查ConstraintLayout约束条件验证尺寸单位使用是否正确6.2 性能优化建议使用ViewBinding替代findViewById避免在onClick中执行耗时操作对频繁调用的方法添加JvmStatic注解考虑使用ViewModel管理计算状态7. 项目扩展方向这个基础计算器还可以进一步扩展为科学计算器添加三角函数、对数等货币换算器单位转换器历史记录功能实现历史记录的简单方案private val historyList mutableListOfString() fun addToHistory(expression: String, result: String) { historyList.add($expression $result) if(historyList.size 10) { historyList.removeAt(0) } }在完成这个项目后建议尝试以下进阶练习为计算器添加主题切换功能实现横竖屏不同布局添加动画效果提升用户体验使用Jetpack Compose重构UI
阅读完成 · 觉得有帮助?