Actividades e intenciones
Introducción.
En este capítulo seguiremos trabajando con el diseño de la interfaz de usuario. En lugar de tratar aspectos de diseño visual, como hemos hecho en el capítulo anterior, vamos a tratar temas más relacionados con el código. En concreto, nos centraremos en las actividades y las intenciones. Estudiaremos también dos herramientas de gran utilidad para cualquier aplicación: la barra de acciones y la definición de las preferencias de configuración. Además, se tratará un tipo de vista muy práctica aunque algo compleja de manejar: ListView.
Nos vamos a centrar en el ejemplo de aplicación que estamos desarrollando, Asteroides, para añadirle diferentes actividades. A continuación se muestra el esquema de navegación entre actividades que queremos crear: comentar que es un ejemplo…
Objetivos:
-
Describir el conjunto de actividades que forman la interfaz de usuario en una aplicación Android.
-
Mostrar cómo podemos, desde una actividad, invocar a otras y cómo podemos comunicarnos con ellas.
-
Incorporar a nuestras aplicaciones ciertos elementos prácticos, tales como los menús o las preferencias.
-
Describir cómo podemos utilizar y crear iconos en nuestras aplicaciones.
-
Estudiar una vista muy útil en Android: ListView.
-
Describir el uso de intenciones para invocar actividades estándar en Android.
Creación de nuevas actividades
El concepto de actividad en Android representa una unidad de interacción con el usuario, es lo que coloquialmente llamamos una pantalla de la aplicación. Una aplicación suele estar formada por una serie de actividades, de forma que el usuario puede ir navegando entre actividades. En concreto, Android suele disponer de un botón (físico o en pantalla) que nos permite volver a la actividad anterior, es decir la actividad que ha creado a la actividad actual.
Toda Actividad ha de tener una vista asociada, que será utilizada como interfaz de usuario. Esta vista suele ser de tipoLayout aunque no es imprescindible, como se verá en el siguiente ejemplo.
Una aplicación estará formada por un conjunto de actividades independientes, es decir se trata de clases independientes que no comparten variables, aunque todas trabajan para un objetivo común. Otro aspecto importante es que toda actividad ha de ser una subclase de Activity.
Las aplicaciones creadas hasta ahora disponían de una única actividad. Esta era creada automáticamente y se le asignaba la vista definida en res/layout/activity_main.xml. Esta actividad era arrancada al comenzar la aplicación. A medida que nuestra aplicación crezca va a ser imprescindible crear nuevas actividades. En este apartado describiremos como hacerlo. Este proceso se puede resumir en cuatro pasos:
-
Crea un nuevo Layout para la actividad.
-
Crea una nueva clase descendiente de Activity. En esta clase tendrás que indicar que el Layout a visualizar es el desarrollado en el punto anterior.
-
Para que nuestra aplicación sea visible será necesario activarla desde otra actividad.
-
De forma obligatoria tendremos que registrar toda nueva actividad en AndroidManifest.xml
Veamos un primer ejemplo de cómo crear una nueva actividad en la aplicación que estamos desarrollando.
Implementación de una caja Acerca de
Vamos a crear una caja Acerca de… y visualizarla cuando se pulse el botón adecuado.
1. En primer lugar crea el fichero res/layout/acercade.xml. Para ello pulsa con el botón derecho sobre el explorador del proyecto en la carpeta res/layout y selecciona New > Layout resource file en Android Studio oNew > Android XML File en Eclipse. Indica en File acercade.xml.
2. Selecciona la lengüeta de edición en XML y copia el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Este programa ha sido desarrollado como ejemplo en el curso de Android para demostrar cómo se pueden lanzar nuevas actividades desde la actividad principal.">
</TextView>
3. Creamos ahora una nueva actividad, que será la responsable de visualizar esta vista. Para ello vamos a crear el fichero AcercaDe.java. Pulsa con el botón derecho sobre el nombre del paquete de la aplicación. Selecciona New > Class. En el campo Name introduce AcercaDe y pulsa Finish. Reemplaza el código por:
public class AcercaDe extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acercade);
}
}
Nota sobre Java: Pulsa Alt-Intro en Android Studio o Ctrl-Shift-O en Eclipse en las dos clases modificadas para que automáticamente se añadan los paquetes que faltan.
4. Pasemos ahora a crear un método en la actividad principal que será ejecutado cuando sea pulsado el botónAcerca de.
public void lanzarAcercaDe(View view){
Intent i = new Intent(this, AcercaDe.class);
startActivity(i);
}
5. Para asociar este método al botón edita el Layout activity_main.xml. Selecciona el botón Acerca de… y en la vista Properties de Eclipse busca el atributo onClick e introduce el valor lanzarAcercaDe.
6. Pasa a la edición XML pulsando en la lengüeta activity_main.xml y observa como, en la etiqueta <Button>correspondiente, se ha añadido el atributo:
android:onClick="lanzarAcercaDe"
NOTA: En caso de que exista algún recurso alternativo para activity_main.xmlrepite el mismo proceso.
7. Ejecuta ahora la aplicación y pulsa en el botón Acerca de. Observarás que el resultado no es satisfactorio ¿Qué ha ocurrido?
El problema es que toda actividad que ha de ser lanzada por una aplicación ha de ser registrada en el fichero AndroidManifest.xml. Para registrar la actividad, abre AndroidManifest.xml. En Eclipse selecciona la lengüeta Application. En Application Nodes pulsa el botón Add… y selecciona Activity. Rellena los campos de la derecha tal y como se muestra a continuación:
En Android Studio tendrás que editar el fichero directamente. Añade el siguiente texto dentro de la etiqueta <application …> </ application>:
<activity android:name=".AcercaDe"
android:label="Acerca de ..."/>
8. Ejecuta de nuevo el programa. El resultado ha de ser similar al mostrado a continuación:
La vista mostrada en el ejemplo anterior no parece muy atractiva. Tratemos de mejorarla aplicando un tema. Como vimos en el capítulo anterior, un tema es una colección de estilos que define el aspecto de una activad o aplicación. Puedes utilizar alguno de los temas disponibles en Android o crear el tuyo propio.
9. En este caso utilizaremos uno de los de Android. Para ello abre AndroidManifest.xml y con Eclipse selecciona la lengüeta Application. En Application Nodes pulsa sobre .AcercaDe y a la derecha introduce en el campoTheme: el valor: @android:style/Theme.Dialog.
10. Si lo prefieres, otrabajas con Android Studio, o edita directamente el fichero AndroidManifest.xml:
<activity android:name=".AcercaDe"
android:label="Acerca de ..."
android:theme="@android:style/Theme.Dialog"/>
11. Ejecuta de nuevo el programa y observa cómo mejora la apariencia:
Un escuchador de evento por código
Como acabamos de ver en un layout podemos definir el atributo XML android:onClick nos permite indicar un método que será ejecutado al hacer click en una vista. A este método se le conoce como escuchador de evento. Resulta muy sencillo y además está disponible en cualquier desdendiente de la clase View. Sin embargo esta técnica presenta dos inconvenientes. En primer lugar, solo está disponible a partir de la versión 1.6 de Android. En segundo lugar, solo está disponible para el evento onClick(). La clase View tiene otros eventos (onLongClick(), onFocusChange(), onKey(),…) para los que no se han definido un atributo xml. Entonces, qué hacemos si queremos trabajar con una versión anterior a 1.6 o definir un evento distinto de onClick(). La respuesta la encontrarás este ejercicio:
1. Abre la clase MainActivity.java y añade las líneas que aparecen subrayadas:
public class MainActivity extends Activity {
private Button bAcercaDe;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bAcercaDe =(Button) findViewById(R.id.Button03);
bAcercaDe.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
lanzarAcercaDe(null);
}
});
}
…
NOTA: En el capítulo 5 se estudiará con más detalle los escuchadores de evento.
El botón salir
En el layout activity_main.xml hemos introducido un botón con texto “Salir”. Queremos que cuando se pulse este botón se cierre la actividad. Para cerrar una actividad puedes llamar al método finish(); Llamar a este método es equivalente a cuando un usuario pulsa la tecla «retorno».
1. Realiza este trabajo utilizando un escuchador de evento por código.
2. Hazlo ahora con el atributo xml android:onClick.
3. Verifica que el resultado es el mismo en ambos casos.
NOTA: No esconveniente que en tus actividades incluyas un botón para cerrarlas. Un dispositivo Android siempre dispone de la tecla «retorno», que tiene la misma función.
Solución:
1. Para resolverlo mediante un escuchador por código, añade en el métoco onCreate() de la claseMainActivity el siguiente código:
Button bSalir =(Button) findViewById(R.id.button04);
bSalir.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
finish();
}
});
2. Para resolverlo con el atributo onClick, añade en MainActivity el método:
public void salir(View view){
finish();
}
Y añade el siguiente atributo al botón “Salir” en el layout activity_main.xml: android:onClick="salir"