Paso 1: Crear el proyecto en Android Studio
Vamos a construir una calculadora paso a paso utilizando el enfoque profesional clásico: Java para la lógica y XML para la interfaz gráfica.
- Abra Android Studio en su equipo.
- Seleccione New Project (Nuevo Proyecto).
- Elija la plantilla Empty Views Activity (¡Ojo! Asegúrese de que tenga la palabra "Views", esto garantiza que usaremos XML). Dé clic en Next.
- Configure los siguientes datos exactos:
- Name:
CalculadoraBasica - Language: Seleccione
Java. - Minimum SDK: Puede dejar el que viene por defecto (por ejemplo, API 24).
- Name:
- Dé clic en Finish y espere un par de minutos a que Gradle configure el proyecto de manera inicial.
Paso 2: Diseñar la Interfaz Gráfica (El código XML)
Android Studio divide el proyecto en dos partes principales. La pantalla visual se encuentra en la siguiente ruta:
app > res > layout > activity_main.xml
- Busque ese archivo en el árbol de carpetas de la izquierda y ábralo.
- En la esquina superior derecha del editor, cambie la vista a Code (Código) para ver las etiquetas de texto.
- Borre todo lo que aparezca ahí de forma nativa y pegue el siguiente código optimizado:
<?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="24dp"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mi Calculadora"
android:textSize="28sp"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_marginBottom="32dp"/>
<EditText
android:id="@+id/txtNumero1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Primer número"
android:inputType="numberDecimal"
android:layout_marginBottom="16dp"/>
<EditText
android:id="@+id/txtNumero2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Segundo número"
android:inputType="numberDecimal"
android:layout_marginBottom="24dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginBottom="32dp">
<Button android:id="@+id/btnSuma" android:layout_width="60dp" android:layout_height="wrap_content" android:text="+" android:layout_margin="4dp"/>
<Button android:id="@+id/btnResta" android:layout_width="60dp" android:layout_height="wrap_content" android:text="-" android:layout_margin="4dp"/>
<Button android:id="@+id/btnMulti" android:layout_width="60dp" android:layout_height="wrap_content" android:text="x" android:layout_margin="4dp"/>
<Button android:id="@+id/btnDiv" android:layout_width="60dp" android:layout_height="wrap_content" android:text="/" android:layout_margin="4dp"/>
</LinearLayout>
<TextView
android:id="@+id/lblResultado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resultado: 0"
android:textSize="22sp"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_marginBottom="24dp"/>
<Button
android:id="@+id/btnLimpiar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Limpiar Pantalla"
android:backgroundTint="#757575"
android:layout_gravity="center"/>
</LinearLayout>
Paso 3: Programar el Comportamiento (El código Java)
Ahora le daremos vida y lógica funcional a esos componentes gráficos. El archivo controlador se encuentra en la ruta:
app > java > com.example.calculadorabasica > MainActivity.java
- Abra el archivo
MainActivity.java. - Reemplace completamente su contenido por el siguiente código modular estructurado:
package com.example.calculadorabasica;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
// 1. Declaración de los componentes de la interfaz
private EditText txtNumero1, txtNumero2;
private TextView lblResultado;
private Button btnSuma, btnResta, btnMulti, btnDiv, btnLimpiar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 2. Vinculación de los objetos Java con los componentes XML (Vistas)
txtNumero1 = findViewById(R.id.txtNumero1);
txtNumero2 = findViewById(R.id.txtNumero2);
lblResultado = findViewById(R.id.lblResultado);
btnSuma = findViewById(R.id.btnSuma);
btnResta = findViewById(R.id.btnResta);
btnMulti = findViewById(R.id.btnMulti);
btnDiv = findViewById(R.id.btnDiv);
btnLimpiar = findViewById(R.id.btnLimpiar);
// 3. Asignación de oyentes de eventos (Listeners) para cada botón
btnSuma.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { calcular('+'); }
});
btnResta.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { calcular('-'); }
});
btnMulti.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { calcular('*'); }
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { calcular('/'); }
});
btnLimpiar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { limpiar(); }
});
}
// 4. Método modular para procesar las operaciones matemáticas
private void calcular(char operacion) {
String n1Str = txtNumero1.getText().toString();
String n2Str = txtNumero2.getText().toString();
// Validación pedagógica básica: verificar campos vacíos
if (n1Str.isEmpty() || n2Str.isEmpty()) {
lblResultado.setText("Error: Introduce ambos números");
return;
}
double num1 = Double.parseDouble(n1Str);
double num2 = Double.parseDouble(n2Str);
double resultado = 0;
switch (operacion) {
case '+':
resultado = num1 + num2;
break;
case '-':
resultado = num1 - num2;
break;
case '*':
resultado = num1 * num2;
break;
case '/':
// Control preventivo de división por cero
if (num2 == 0) {
lblResultado.setText("Error: No se puede dividir entre 0");
return;
} else {
resultado = num1 / num2;
}
break;
}
lblResultado.setText("Resultado: " + resultado);
}
// 5. Método para restaurar el estado inicial de la app
private void limpiar() {
txtNumero1.setText("");
txtNumero2.setText("");
lblResultado.setText("Resultado: 0");
}
}
Paso 4: Probar la aplicación
Para evitar sobrecargar los recursos de procesamiento simulando un dispositivo virtual, realizaremos el despliegue físico directo en un teléfono celular:
- Conecte su teléfono Android a su equipo utilizando un cable USB compatible. Asegúrese de tener activa la Depuración por USB en las opciones de desarrollador de su terminal.
- En la barra superior de herramientas de Android Studio, ubique el menú desplegable al lado del icono verde de "Play". Ahí verá reflejado el modelo de su teléfono celular.
- Dé clic en el botón verde de Run ('app') o presione el atajo de teclado correspondiente de ejecución.
- El entorno de Gradle compilará los manifiestos, empaquetará los binarios e instalará automáticamente la aplicación en su teléfono celular en cuestión de segundos.
Esta práctica implementa de forma didáctica conceptos clave del paradigma orientado a objetos (POO), el control preventivo de excepciones aritméticas y la clara división estructural de capas arquitectónicas (Vista/Controlador).