一、前言
随着智能手机的普及,手机应用的开发成为了许多人关注的焦点。而Android作为最为流行的操作系统之一,其应用的开发也越来越受到大众的关注。本篇文章将带领初学者从零开始搭建一个简单的计算器应用,并讲解其中的一些基础知识。
二、开发环境配置
在开始编写代码之前,我们需要配置好Android开发环境。首先要下载安装Android Studio,该软件集成了一系列Android开发所需要的工具和库,并提供了强大的IDE和调试功能。
在安装完Android Studio之后,我们还需要在SDK Manager中下载所需的Android SDK和Android Virtual Device。其中Android SDK是开发Android应用所必须的一些库和工具,而Android Virtual Device是用于模拟Android设备的虚拟机。
安装好所需的工具之后,我们就可以开始开发我们的第一个Android应用了。
三、UI设计
计算器应用的主要界面需要包括数字按键、运算符号按键、清除按钮以及结果显示区域。我们需要在res/layout目录下创建一个新的xml文件,来定义应用的UI界面。以下是一个例子:
<?xml version="1.0" encoding="utf-8"?>
<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:textSize="24sp"
android:textStyle="bold"
android:gravity="right"
android:padding="16dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:layout_weight="1" />
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:layout_weight="1" />
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:layout_weight="1" />
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:layout_weight="1" />
<Button
android:id="@+id/btn_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:layout_weight="1" />
<Button
android:id="@+id/btn_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"
android:layout_weight="1" />
<Button
android:id="@+id/subtract"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7"
android:layout_weight="1" />
<Button
android:id="@+id/btn_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"
android:layout_weight="1" />
<Button
android:id="@+id/btn_9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9"
android:layout_weight="1" />
<Button
android:id="@+id/multiply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:layout_weight="1" />
<Button
android:id="@+id/btn_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_weight="1" />
<Button
android:id="@+id/equal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:layout_weight="1" />
<Button
android:id="@+id/divide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
以上代码定义了一个线性布局,首先包含了一个TextView用于显示计算结果。接下来分几行定义了数字按键、运算符号按键和一个清除按钮的水平布局,其中每个按键都使用了Button控件,并通过layout_weight属性来使它们平均分配布局空间,并填满整行。最后再定义一个包含“/”符号的运算符按键以及一个包含“=”符号的等于按钮,它们都与数字按键和其他运算符按键一样。
四、Java代码实现
可以在res/layout文件夹中的xml文件中定义应用的UI界面,但是如果要使应用具有一定的功能,就需要在Java代码中实现它们。以下是一个简单的实现:
package com.example.calculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView result;
private double num1, num2;
private String operator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
result = findViewById(R.id.result);
findViewById(R.id.btn_0).setOnClickListener(this);
findViewById(R.id.btn_1).setOnClickListener(this);
findViewById(R.id.btn_2).setOnClickListener(this);
findViewById(R.id.btn_3).setOnClickListener(this);
findViewById(R.id.btn_4).setOnClickListener(this);
findViewById(R.id.btn_5).setOnClickListener(this);
findViewById(R.id.btn_6).setOnClickListener(this);
findViewById(R.id.btn_7).setOnClickListener(this);
findViewById(R.id.btn_8).setOnClickListener(this);
findViewById(R.id.btn_9).setOnClickListener(this);
findViewById(R.id.add).setOnClickListener(this);
findViewById(R.id.subtract).setOnClickListener(this);
findViewById(R.id.multiply).setOnClickListener(this);
findViewById(R.id.divide).setOnClickListener(this);
findViewById(R.id.btn_clear).setOnClickListener(this);
findViewById(R.id.equal).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_0:
case R.id.btn_1:
case R.id.btn_2:
case R.id.btn_3:
case R.id.btn_4:
case R.id.btn_5:
case R.id.btn_6:
case R.id.btn_7:
case R.id.btn_8:
case R.id.btn_9:
Button btn = (Button) v;
String str = btn.getText().toString();
result.append(str);
break;
case R.id.add:
case R.id.subtract:
case R.id.multiply:
case R.id.divide:
Button btnOperator = (Button) v;
num1 = Double.parseDouble(result.getText().toString());
operator = btnOperator.getText().toString();
result.setText("");
break;
case R.id.btn_clear:
result.setText("");
break;
case R.id.equal:
num2 = Double.parseDouble(result.getText().toString());
double resultNum = 0;
switch (operator) {
case "+":
resultNum = num1 + num2;
break;
case "-":
resultNum = num1 - num2;
break;
case "*":
resultNum = num1 * num2;
break;
case "/":
if (num2 == 0) {
resultNum = Double.NaN;
} else {
resultNum = num1 / num2;
}
break;
}
result.setText(String.valueOf(resultNum));
break;
default:
break;
}
}
}
在MainActivity类中,我们定义了许多变量和方法。num1和num2是用于记录计算操作数字的双精度浮点数,而operator是用于记录所使用的运算符的字符串。initView()方法初始化了控件,并为每个数字按钮、每个运算符号按钮、清除按钮和等于按钮添加点击事件监听器。
点击事件onClick(View v)方法中定义了按钮的点击事件处理逻辑。当点击数字按钮时,获取其文本并将其追加到结果显示区域上;当点击运算符按钮时,将结果显示区域的内容转换为num1,将运算符记录在operator中,并将结果显示区域清空;当点击清除按钮时,可以清除结果显示区域的内容;当点击等于按钮时,将结果显示区域中的内容转换为num2,根据所使用的运算符计算结果,并将计算结果显示在结果显示区域上。
五、应用体验
打开模拟器或在真实的Android设备上运行这个计算器应用,您将得到以下界面:
在这个演示应用中,可以执行加、减、乘和除四种操作,并可以执行连续的操作,最终显示计算结果。
六、总结
本篇文章讲解了开发一个简单计算器应用所需的基本知识。通过XML定义UI界面和Java代码实现功能逻辑,我们可以在Android操作系统上构建出一个完整而有用的应用。