简体中文简体中文
EnglishEnglish
简体中文简体中文

深入解析Android计算器源码:从原理到实践

2025-01-24 14:15:37

随着移动设备的普及,Android系统逐渐成为开发者关注的焦点。在Android应用开发中,计算器是一个基础且实用的应用。本文将深入解析Android计算器的源码,从原理到实践,帮助开发者更好地理解Android应用开发过程。

一、Android计算器简介

Android计算器是一个简单的四则运算计算器,用户可以通过输入数字和运算符,实现加、减、乘、除等基本运算。计算器应用界面简洁,操作方便,是Android系统自带的应用之一。

二、Android计算器源码结构

Android计算器源码主要分为以下几个部分:

1.activity_calculator.xml:定义了计算器应用的布局文件,包括数字键、运算符键和结果显示框。

2.CalculatorActivity.java:实现计算器的主要功能,包括用户交互、数据计算和结果显示。

3.Calculator.java:定义了计算器核心逻辑,包括四则运算和表达式的解析。

4.R.java:自动生成的资源文件,包含了布局文件、图片、字符串等资源。

三、Android计算器源码解析

1.布局文件(activity_calculator.xml)

`xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layoutwidth="matchparent" android:layoutheight="matchparent">

<EditText
    android:id="@+id/editTextResult"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:editable="false"
    android:gravity="right"
    android:hint="0"
    android:textSize="24sp" />
<GridLayout
    android:id="@+id/keyBoard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/editTextResult"
    android:columnCount="4"
    android:rowCount="5">
    <!-- 数字键 -->
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2" />
    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3" />
    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="4" />
    <!-- 运算符键 -->
    <Button
        android:id="@+id/buttonAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+" />
    <Button
        android:id="@+id/buttonSub"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-" />
    <Button
        android:id="@+id/buttonMul"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="×" />
    <Button
        android:id="@+id/buttonDiv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="÷" />
    <!-- 其他键 -->
    <Button
        android:id="@+id/buttonClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="C" />
    <Button
        android:id="@+id/buttonDot"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="." />
    <Button
        android:id="@+id/button0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0" />
    <Button
        android:id="@+id/buttonEqual"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="=" />
</GridLayout>

</RelativeLayout> `

2.CalculatorActivity.java

`java public class CalculatorActivity extends AppCompatActivity {

private EditText editTextResult;
private Calculator calculator;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calculator);
    editTextResult = findViewById(R.id.editTextResult);
    calculator = new Calculator();
    // 初始化数字键和运算符键的点击事件
    Button button1 = findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editTextResult.append("1");
        }
    });
    // ... 其他键的点击事件初始化 ...
}
// ... 其他方法 ...

} `

3.Calculator.java

`java public class Calculator {

public String calculate(String expression) {
    // 使用正则表达式解析表达式,实现四则运算
    Pattern pattern = Pattern.compile("(\\d+\\.?\\d*)|([+\\-\\*\\/])");
    Matcher matcher = pattern.matcher(expression);
    double result = 0;
    double number = 0;
    int lastOperator = -1;
    while (matcher.find()) {
        String match = matcher.group();
        if (match.matches("\\d+\\.?\\d*")) {
            number = Double.parseDouble(match);
            if (lastOperator == 0) {
                result = number;
            } else if (lastOperator == 1) {
                result += number;
            } else if (lastOperator == 2) {
                result -= number;
            } else if (lastOperator == 3) {
                result *= number;
            } else if (lastOperator == 4) {
                result /= number;
            }
        } else {
            lastOperator = match.charAt(0);
        }
    }
    return String.valueOf(result);
}

} `

四、总结

本文深入解析了Android计算器的源码,从布局文件到核心逻辑,帮助开发者了解Android应用开发的基本流程。通过分析计算器源码,开发者可以学习到Android布局、事件处理、正则表达式解析等知识,为今后的Android应用开发打下坚实基础。