Android开发APP是一个庞大且复杂的领域,但这里我们将介绍一个简单的经典实例——一个计算器APP。在这个实例中,我们将涉及到基本的Android开发知识和应用程序的架构。
应用程序架构:
在应用程序中,我们有三大组件来形成应用程序的架构——Activity、Service和Broadcast Receiver。Activity用于显示用户界面,并在用户与应用程序交互的过程中管理应用程序状态。Service用于在后台执行长时间运行的操作,而Broadcast Receiver则用于处理应用程序中不同组件之间的通信。
在我们的计算器APP中,我们将使用Activity来显示计算器界面和响应用户输入,Service和Broadcast Receiver将不在此实例中使用。
布局和设计:
为了设计计算器APP的用户界面,我们需要使用XML布局文件。布局文件可以使用不同类型的布局组件来安排用户界面的元素。在我们的计算器应用中,我们需要使用RelativeLayout、LinearLayout、TextView、EditText、Button和GridLayout来构建用户界面。
RelativeLayout允许我们在布局中定义元素之间的相对关系。LinearLayout用于垂直或水平排列元素。TextView用于显示文本;EditText用于接收用户输入。Button用于触发计算器操作,而GridLayout用于定义整个计算器的布局。
XML布局代码如下所示:
```
android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/outputTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:background="@drawable/edit_text_background" android:textSize="48sp" android:textColor="@color/black" android:textAppearance="?android:attr/textAppearanceLarge"/> android:layout_below="@id/outputTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="4" android:rowCount="4">
```
代码实现:
在实现代码时,我们使用了主Activity类MainActivity和Calculator类。MainActivity用于管理计算器界面、处理用户输入并向用户显示输出。Calculator类使用解析器根据用户输入计算结果。
MainActivity代码实现如下所示:
```
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView outputTextView;
private Calculator calculator = new Calculator();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
outputTextView = findViewById(R.id.outputTextView);
findViewById(R.id.btn_one).setOnClickListener(this);
findViewById(R.id.btn_two).setOnClickListener(this);
findViewById(R.id.btn_three).setOnClickListener(this);
findViewById(R.id.btn_four).setOnClickListener(this);
findViewById(R.id.btn_five).setOnClickListener(this);
findViewById(R.id.btn_six).setOnClickListener(this);
findViewById(R.id.btn_seven).setOnClickListener(this);
findViewById(R.id.btn_eight).setOnClickListener(this);
findViewById(R.id.btn_nine).setOnClickListener(this);
findViewById(R.id.btn_zero).setOnClickListener(this);
findViewById(R.id.btn_dot).setOnClickListener(this);
findViewById(R.id.btn_add).setOnClickListener(this);
findViewById(R.id.btn_minus).setOnClickListener(this);
findViewById(R.id.btn_multiply).setOnClickListener(this);
findViewById(R.id.btn_divide).setOnClickListener(this);
findViewById(R.id.btn_clear).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_one:
case R.id.btn_two:
case R.id.btn_three:
case R.id.btn_four:
case R.id.btn_five:
case R.id.btn_six:
case R.id.btn_seven:
case R.id.btn_eight:
case R.id.btn_nine:
case R.id.btn_zero:
case R.id.btn_dot:
String input = ((Button) view).getText().toString();
String output = calculator.addInput(input);
outputTextView.setText(output);
break;
case R.id.btn_add:
case R.id.btn_minus:
case R.id.btn_multiply:
case R.id.btn_divide:
input = ((Button) view).getText().toString();
output = calculator.performOperation(input);
outputTextView.setText(output);
break;
case R.id.btn_clear:
output = calculator.clear();
outputTextView.setText(output);
break;
}
}
}
```
Calculator代码实现如下所示:
```
public class Calculator {
private static final String ZERO = "0";
private static final String ERROR = "ERROR";
private StringBuilder input = new StringBuilder();
private double prevOperand = 0;
private double currOperand = 0;
private String operation = "";
public String addInput(String input) {
if (this.input.toString().equals(ZERO)) {
this.input = new StringBuilder();
}
this.input.append(input);
return this.input.toString();
}
public String performOperation(String operation) {
if (!validate()) {
return ERROR;
}
if (prevOperand == 0) {
prevOperand = Double.parseDouble(input.toString());
} else {
currOperand = Double.parseDouble(input.toString());
switch (this.operation) {
case "+":
prevOperand = prevOperand + currOperand;
break;
case "-":
prevOperand = prevOperand - currOperand;
break;
case "*":
prevOperand = prevOperand * currOperand;
break;
case "/":
prevOperand = prevOperand / currOperand;
break;
}
}
this.operation = operation;
input = new StringBuilder();
return Double.toString(prevOperand);
}
public String clear() {
input = new StringBuilder();
prevOperand = 0;
currOperand = 0;
operation = "";
return ZERO;
}
private boolean validate() {
if (TextUtils.isEmpty(input)) {
return false;
}
if (prevOperand == 0 && currOperand == 0) {
return true;
}
if (currOperand == 0 && operation.equals("/")) {
return false;
}
return true;
}
}
```
在Calculator类中,我们使用StringBuilder类来接收用户输入,声明了两个操作数和一个操作符的变量,以及三个方法addInput()、performOperation()和clear()。addInput()方法用于添加用户输入,performOperation()方法用于执行计算器操作,clear()方法用于清除计算器。
这个例子虽然简单,但它涵盖了基本的Android应用程序开发。你可以把这个示例作为一个起点,并扩展它来构建更为复杂的应用程序。