Читать книгу El gran libro de Android - Jesus Tomás Gironés - Страница 63
2.2. Creación de una interfaz de usuario usando XML
ОглавлениеEn el ejemplo anterior hemos creado la interfaz de usuario directamente en el código. A veces puede ser muy complicado programar interfaces de usuario, ya que pequeños cambios en el diseño pueden corresponder a complicadas modificaciones en el código. Un principio importante en el diseño de software es que conviene separar todo lo posible el diseño, los datos y la lógica de la aplicación.
Android proporciona una alternativa para el diseño de interfaces de usuario: los ficheros de diseño basados en XML. Veamos uno de estos ficheros. Para ello accede al fichero res/layout/activity_main.xml de nuestro proyecto. Se muestra a continuación. Este layout o fichero de diseño proporciona un resultado similar al del ejemplo de diseño por código anterior:
NOTA: cuando haces doble clic en el Package Explorer sobre activity_main.xml, probablemente lo abra en modo Graphical Layout. Para verlo en modo texto, selecciona la pestaña activity_main.xml.
Resulta sencillo interpretar su significado. Se introduce un elemento de tipo RelativeLayout, cuya función, como se estudiará más adelante, es contener otros elementos de tipo View. Este RelativeLayout tiene cinco atributos. Los dos primeros, xmlns:android y xmlns:tools, son declaraciones de espacios de nombres de XML que utilizaremos en este fichero (solo es necesario especificar este tipo de parámetro en el primer elemento). Los dos siguientes permiten definir la anchura y altura de la vista. En el ejemplo se ocupará todo el espacio disponible. El último atributo indica la actividad asociada a este layout.
Dentro del RelativeLayout solo tenemos un elemento de tipo TextView, que dispone de tres atributos. Los dos primeros definen la anchura y altura (se ajustarán al texto contenido. El último indica el texto a mostrar. No se ha indicado un texto en concreto, sino una referencia, "@string/hello_world". Esta referencia ha de estar definida en el fichero res/values/strings.xml. Si abres este fichero, verás el siguiente contenido:
Esta es la práctica recomendada en Android para la inserción de textos en tu aplicación, dado que facilita su localización a la hora de realizar la traducción a otros idiomas. Es decir, utilizaremos los ficheros layout para introducir el diseño de las interfaces y el fichero strings para introducir los textos utilizados en los distintos idiomas.
Ejercicio: Creación de la interfaz de usuario con XML |
1.Para utilizar el diseño en XML regresa al fichero MainActivity.java y deshaz los cambios que hicimos antes (elimina las tres últimas líneas y quita el comentario).
2.Ejecuta la aplicación y verifica el resultado. Ha de ser muy similar al anterior.
3.Modifica el valor de hello_world en el fichero res/values/strings.xml.
4.Vuelve a ejecutar la aplicación y visualiza el resultado.
Analicemos ahora la línea en la que acabas de quitar el comentario:
setContentView(R.layout.activity_main);
Aquí, R.layout.main corresponde a un objeto View que se creará en tiempo de ejecución a partir del recurso activity_main.xml. Trabajar de esta forma, en comparación con el diseño basado en código, no quita velocidad y requiere menos memoria. El plug-in de Eclipse crea automáticamente este identificador en la clase R del proyecto a partir de los elementos de la carpeta res. La definición de la clase R puede ser similar a:
NOTA: este fichero se genera automáticamente. Nunca debes editarlo.
Has de tener claro que los identificadores de la clase R son meros números que informan al gestor de recursos sobre qué datos ha de cargar. Por lo tanto, no se trata de verdaderos objetos; estos se crearán en tiempo de ejecución solo cuando sea necesario usarlos.
Ejercicio: El fichero R.java |
1.Abre el fichero llamado gen/com.example.holamunco/R.java de tu aplicación.
2.Compáralo con el fichero mostrado previamente. ¿Qué diferencias encuentras? (RESPUESTA: los valores numéricos en hexadecimal).
3.Abre el fichero MainActivity.java y reemplaza R.layout.activity_main por el valor numérico al que corresponde en R.java.
4.Ejecuta de nuevo el proyecto. ¿Funciona? ¿Crees que sería adecuado dejar este valor numérico?
5.Aunque haya funcionado, este valor puede cambiar en un futuro. Por lo tanto, para evitar problemas futuros vuelve a reemplazarlo por R.layout.activity_main.
Preguntas de repaso: | Diseño de la interfaz de usuarioen XML y en código |
Preguntas de repaso: El fichero R.java |