Practica Material Design
Una aplicación basada en material design A partir de la versión 5.0 de Android (API 21), se introduce Material Design. Se trata de una guía para el diseño visual de las aplicaciones, que Google no quiere aplicar exclusivamente a dispositivos móviles, sino que pretende utilizar material design en todo tipo de contenidos digitales (páginas Web, aplicaciones para ordenadores, vídeos, ).
Se basa en diseños y colores planos. Uno de sus principios es dar peso o materialidad a los elementos del interfaz de usuario. Para ello va a tratar de darle volumen o profundidad utilizando sombras, capas y animaciones. Observa como los botones flotantes (ver botón con estrella en el siguiente ejercicio) se visualizan con una sombra para que parezcan que están en una capa superior y suelen visualizarse con animaciones. La idea es que parezcan que están construidos de material físico. Para más información puedes consultar la especificación de Material Design
Ejemplos
Cuando creas un nuevo proyecto con Android Studio, si escoges una actividad del tipo Blank Activity, tendrá un diseño inicial basado en Material Design. Esta actividad, utilizará un tema que hereda de android:theme.material. Además, se incorporan varios widgets basados en este diseño, como: Toolbar o FloatingActionButton, y se incluirán las dependencias adecuadas para poder usar estos widgets:
1. Crea un nuevo proyecto con los siguientes datos: Application name:material Design Package name:com.example.mislugares 2. La aplicación solo va a ser para móviles, por lo que en la segunda ventana has de marcar el primer checkbox:
Recuerda que un aspecto delicado es seleccionar el SDK mínimo con el que trabajará la aplicación. Valores bajos te permiten instalarla en un mayor número de dispositivos, pero tendrás menos características disponibles en el API. Un valor adecuado que te permite cubrir casi todos los dispositivos actuales es API 15.
3. En la siguiente ventana te pregunta si quieres añadir algún tipo de actividad a la aplicación. Indica: Add an activity: Blank Activity De esta forma se creará una actividad con diseño basado en Material Design. Dispondrá de una barra de acciones y un botón flotante.
4. En la última ventana te pedirá que configures algunos aspectos de esta actividad:
De arriba abajo corresponde al nombre de la clase Java donde se implementa la actividad, nombre del layout XML donde se define su aspecto visual, título de la actividad y archivo XML de menú donde se indica las opciones disponibles. Deja los valores por default.
5. Ejecuta el proyecto. El resultado ha de ser similar al siguiente
6. Pasemos a estudiar algunos elementos del proyecto. En el explorador del proyecto abre el Archivo Gradle Scripts > build.gradle (Module:app). Observa como en la sección dependencies se han incluido las siguientes librerías:
7. Pasemos a estudiar los layouts creados en el proyecto. En el explorador del proyecto abre el fichero app > res > layouut > activity_main.xml. En la vista Design no se mostrará nada. Selecciona la vista Text pulsando sobre la lengüeta de la parte inferior. 8. Estudia la estructura de este layout. Observa como las etiquetas de las vistas son muy largas. Esto es debido a que no están definidas en el API de Android si no en una librería (en concreto a las design). La función de cada una de vistas se estudia en el siguiente apartado. Puede ser un buen momento para leerlo. 9. Abre el fichero app > res > layouut > content_main.xml. Selecciona la vista Text pulsando sobre la lengüeta de la parte inferior. Se trata de un layout muy simple: un <RelativeLayout> con un <TextView> dentro.
10. Abre ahora app > java > com.example.mislugares > MainActivity.java. En el método oncreate() se inicializan algunas de las vistas introducidas en el layout. 11. Si al ejecutar la aplicación pulsas en los tres puntos de la esquina superior derecha, se mostrará un menú con la opción Settings.
Las animaciones son muy importantes en Material Design. Google quiere que los elementos del interfaz de usuario se muevan de forma coordinada, de forma que, al moverse un elemento, este puede desplazar a otro. Observa como al ejecutar el proyecto anterior, cuando pulsas el botón flotante se mueve hacia arriba mientras aparece un texto. Para poder realizar esta animación, y alguna otra más, se utiliza CoordinationLayout. Es un descendiente de LinearLayout que nos proporciona un nivel adicional de control sobre las vistas que contiene para controlar su comportamiento y permite crear interdependencias. Este contenedor se suele utilizar como raíz del layout. Para entender cómo se utiliza abre el fichero activity_main.xml. Observa cómo tras eliminar los atributos la estructura resultante es la siguiente:
El CoordinatorLayout actúa de contenedor y va a permitir que los elementos que contiene puedan realizar animaciones coordinadas. Mediante el atributo fitssystemwindows podemos conseguir modificar la barra de estado del sistema. En concreto aplicando a esta barra el color colorprimarydark (azul oscuro en el ejemplo anterior), para que combine con el color de la aplicación colorprimary (azul más claro en el ejemplo anterior).
El AppBarLayout también es un LinearLayout vertical y ha sido diseñado para usarlo dentro de un CoordinatorLayout. A su vez es habitual que contenga un elemento de tipo Toolbar y opcionalmente pestañas (TabLayout). Su finalidad es contener los elementos de la barra de acciones de la aplicación (conocida según la nueva nomenclatura de Material Design como AppBar). Gracias al atributo layout_scrollflags podemos conseguir que los elementos de dentro de esta barra puedan desplazarse hasta que sean ocultados. Dentro de AppBarLayout tenemos un Toolbar. Como veremos en breve es un nuevo widget que tiene la misma función que un ActionBar.
El contenido del layout que ha de visualizar la aplicación se incluye en un archivo aparte content_main. De esta forma queda más estructurado y podemos crear contenidos específicos según el tipo de pantalla, versión, Observa como en el proyecto se ha creado un content_main que simplemente muestra el texto Hello World!. Tras el <include> se ha insertado un FloatingActionButtonse trata de un tipo de botón característico introducido en Material Design para las acciones principales. Otro aspecto que no hay que olvidar es que ahora hemos de inicializar desde código algunos elementos. Esto se realiza en el método oncreate() de la actividad:
Practica Paso a Paso
Este código resultará más sencillo de entender, tras realizar el apartado Uso práctico de Vistas. Las dos primeras líneas han sido explicadas en la unidad anterior. El método setsupportactionbar() es utilizado para indicar a la actividad la barra de acciones que ha de utilizar. Esta barra de acciones es almacenada en el objeto toolbar, que es creado en el layout XML. Para encontrar el objeto se utiliza si id: R.id.toolbar. Con respecto al botón flotante simplemente se carga en el objeto fab y se le asigna un escuchador onclick. Más adelante se describe el uso de escuchadores para personalizar la acción asociada. Actualmente, cuando se pulsa muestra un mensaje de texto utilizando un Snackbar. Se trata de una nueva forma de mostrar cuadros de dialogo, introducida en Material Desing, similar a Toast o AlertDialog. La diferencia es que se muestran en la parte inferior de la pantalla y que se visualizan con una animación de desplazamiento.