Калькулятор
Цей приклад демонструє створення простого калькулятора для Android із використанням найкращих практик, але без застосування архітектури MVVM.
Основні функціональні вимоги
- Функції: додавання, віднімання, множення, ділення.
- Інтерфейс: кнопки для цифр та операцій, а також поле для виведення результатів.
- Обробка помилок: перевірка введення та уникнення поділу на нуль.
Структура проєкту
MainActivity— головна активність.- Розмітка — файл XML для UI.
Файл розмітки activity_main.xml
Розмітка містить:
- Поле для введення та відображення результатів.
- Кнопки для цифр та математичних операцій.
<?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"
android:padding="16dp">
<EditText
android:id="@+id/editTextResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:textSize="24sp"
android:gravity="right"
android:inputType="none"
android:focusable="false" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4"
android:paddingTop="16dp">
<!-- Buttons for numbers -->
<Button
android:text="7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="/"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onOperatorClick" />
<!-- Кнопки другого ряду -->
<Button
android:text="4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="*"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onOperatorClick" />
<!-- Кнопки третього ряду -->
<Button
android:text="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="-"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onOperatorClick" />
<!-- Кнопки останнього ряду -->
<Button
android:text="0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onNumberClick" />
<Button
android:text="C"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onClearClick" />
<Button
android:text="."
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onDecimalClick" />
<Button
android:text="+"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:onClick="onOperatorClick" />
</GridLayout>
<Button
android:text="="
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onEqualClick" />
</LinearLayout>
Код MainActivity.java
Головна логіка обробки подій натискання кнопок.
package com.example.calculator;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private EditText editTextResult;
private String currentOperator = "";
private double firstValue = 0;
private boolean isOperatorClicked = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextResult = findViewById(R.id.editTextResult);
}
public void onNumberClick(View view) {
Button button = (Button) view;
String currentText = editTextResult.getText().toString();
if (isOperatorClicked) {
currentText = "";
isOperatorClicked = false;
}
editTextResult.setText(currentText + button.getText().toString());
}
public void onOperatorClick(View view) {
Button button = (Button) view;
currentOperator = button.getText().toString();
firstValue = Double.parseDouble(editTextResult.getText().toString());
isOperatorClicked = true;
}
public void onEqualClick(View view) {
double secondValue = Double.parseDouble(editTextResult.getText().toString());
double result = 0;
switch (currentOperator) {
case "+":
result = firstValue + secondValue;
break;
case "-":
result = firstValue - secondValue;
break;
case "*":
result = firstValue * secondValue;
break;
case "/":
if (secondValue != 0) {
result = firstValue / secondValue;
} else {
editTextResult.setText("Error");
return;
}
break;
}
editTextResult.setText(String.valueOf(result));
}
}
Висновок
Цей проєкт демонструє основи створення функціонального калькулятора. Його можна покращити, використовуючи архітектурні підходи (MVVM) або додати більш складні операції.