Este es el segundo ejercicio con Android. Vamos a hacer una app que pida:
- Cantidad de productos
- Precio de cada producto
Y calcule el valor sin IVA, el IVA y el valor con IVA. El IVA es un impuesto del 16 % que se aplica al menos en México, supongo que en otros lugares puede variar.
Por cierto, los resultados deben mostrarse en una segunda actividad.
Repositorio en GitHub
Puedes ver el código completo de la app en mi perfil.
Layout de actividad principal: pedir precio y cantidad
Para comenzar vamos a poner dos EditText de tipo numérico en donde se va a escribir la cantidad de productos y el precio por cada uno.
También vamos a poner un botón para que cuando se haga click se pase a otra actividad en donde se muestran los resultados.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Precio"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="numberSigned"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Cantidad"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="numberSigned"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:text="Ver total"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText2" />
</android.support.constraint.ConstraintLayout>
El primer EditText con id editText tendrá el precio, y el segundo con el id editText2 tendrá la cantidad de productos.
El único Button tiene el id button, este se encargará de pasar los datos a la otra actividad.
Código Java de la primera actividad
Para escuchar el click del botón, recuperar el precio y la cantidad de los productos vamos a programar un poco con Java.
Obtenemos referencias a los elementos de la vista y le ponemos un listener al botón; en el método onClick (sobrescrito) obtenemos el precio con la cantidad, calculamos el total bruto, iva y total neto.
Luego pasamos esos tres valores a la Actividad2 en donde simplemente los vamos a mostrar; para pasarlos usamos un Intent.
package me.parzibyte.ventaconiva;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Obtener referencia a los elementos
final EditText editTextPrecio = findViewById(R.id.editText),
editTextCantidad = findViewById(R.id.editText2);
Button botonQueCalcula = findViewById(R.id.button);
// Escuchar el click del botón
botonQueCalcula.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Obtener ambos valores como cadena
String precioString = editTextPrecio.getText().toString(),
cantidadString = editTextCantidad.getText().toString();
// Si están vacíos no seguimos ejecutando más código
if (precioString.isEmpty() || cantidadString.isEmpty()) return;
// Si el código continúa hasta aquí significa que las cosas van bien
// convertimos cadenas a double
double precio = Double.parseDouble(precioString),
cantidad = Double.parseDouble(cantidadString);
// Hora de hacer cálculos
final double IVA = 0.16;
double totalBruto = precio * cantidad;
// Calcular por separado el IVA de ese total bruto
double totalIva = totalBruto * IVA;
// Finalmente el total neto es la suma de los anteriores
double totalNeto = totalBruto + totalIva;
// Ahora creamos un intent y ponemos los 3 datos
Intent intent = new Intent(MainActivity.this, Actividad2.class);
intent.putExtra("totalBruto", totalBruto);
intent.putExtra("totalIva", totalIva);
intent.putExtra("totalNeto", totalNeto);
// Hacemos el cambio y nos vemos en Actividad2
startActivity(intent);
}
});
}
}
Todos los cálculos se hacen en esta actividad y los resultados se pasan a la siguiente.
El diseño de la segunda actividad
En la segunda actividad tenemos 3 TextView que van a mostrar los 3 valores. El layout XML queda así:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Actividad2">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
</android.support.constraint.ConstraintLayout>
Los 3 elementos están dentro de un ConstraintLayout. Tiene el id textView1
, textView2
y textView3
.
Código Java de la actividad de resultados
En el código Java simplemente obtenemos la referencia a los elementos y les ponemos los valores que nos enviaron por el Intent.
Queda así:
package me.parzibyte.ventaconiva;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class Actividad2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_actividad2);
// Obtener referencia
TextView textView1 = findViewById(R.id.textView),
textView2 = findViewById(R.id.textView2),
textView3 = findViewById(R.id.textView3);
// Recuperar valores
Intent intent = getIntent();
// El defaultValue es lo que se regresa si no se encuentra valor con la clave especificada
double totalBruto = intent.getDoubleExtra("totalBruto", 0);
double totalIva = intent.getDoubleExtra("totalIva", 0);
double totalNeto = intent.getDoubleExtra("totalNeto", 0);
// Ahora preparamos unos mensajes para ponerlos en los TextView
String mensajeTotalBruto = "Bruto: " + totalBruto;
String mensajeTotalIva = "IVA: " + totalIva;
String mensajeTotalNeto = "Neto: " + totalNeto;
// Finalmente le ponemos ese mensaje a cada TextView
textView1.setText(mensajeTotalBruto);
textView2.setText(mensajeTotalIva);
textView3.setText(mensajeTotalNeto);
}
}
Con eso terminamos por hoy.