Este codelab es parte del curso Conceptos básicos de Kotlin para Android. Aprovecharás al máximo este curso si trabajas con los codelabs de forma secuencial. Todos los codelabs del curso se enumeran en la página de destino de los codelabs de Android Kotlin Fundamentals.
Introducción al diseño
En esta serie de codelabs, nos enfocaremos en uno de los aspectos más importantes del desarrollo para Android: el diseño de apps. Los aspectos obvios del diseño de la app son las vistas, el texto y los botones, y su ubicación en la pantalla, así como los colores y las fuentes que usan. Las sugerencias para el usuario sobre qué hacer a continuación también son un aspecto esencial del diseño. Los usuarios deben poder saber de un vistazo lo que están viendo, lo que es importante y lo que pueden hacer.
Compara las dos pantallas que se muestran a continuación. Ten en cuenta que, al mover elementos y enfocar la atención en lo importante, puedes ayudar al usuario a comprender lo que sucede. En el caso de las pantallas simples, un buen diseño suele significar mostrar menos información. En el caso de las pantallas con mucha información importante, un buen diseño hace que la información densa se comprenda de un vistazo. A medida que trabajes en apps para Android, es posible que escuches este concepto llamado arquitectura de la información (AI).
Otro nivel de diseño es la creación de flujos de usuarios coherentes, o casos de uso, que permiten a los usuarios completar tareas. Esta forma de diseño se llama diseño de experiencia del usuario (UXD), y algunos diseñadores se especializan en ella.
|
|
Si no tienes acceso a un diseñador, aquí tienes algunas sugerencias para comenzar:
- Define casos de uso. Escribe lo que los usuarios deberían lograr con tu app y cómo hacerlo.
- Implementa un diseño. No te aferres a tu primer borrador y solo haz que sea "suficientemente bueno", ya que lo cambiarás después de ver cómo interactúan los usuarios reales con él.
- Obtén comentarios. Busca a cualquier persona a la que puedas convencer para que pruebe tu app: tu familia, tus amigos o incluso personas que acabas de conocer en un Google Developer Group. Pídele que use tu app para realizar un caso de uso mientras lo observas y tomas notas detalladas.
- ¡Definir mejor! Con toda esa información, mejora la app y, luego, vuelve a probarla.
Estas son algunas otras preguntas que debes hacerte cuando diseñes una excelente experiencia en la app. En los codelabs anteriores, aprendiste técnicas para abordar estos problemas:
- ¿La app pierde su estado cuando el usuario rota el dispositivo?
- ¿Qué sucede cuando el usuario abre la app? ¿El usuario ve un indicador de carga o los datos están listos en una caché sin conexión?
- ¿La app está codificada de manera eficiente y garantiza que siempre responda al tacto del usuario?
- ¿La app interactúa con los sistemas de backend de una manera que nunca genera datos extraños, incorrectos o inactivos que se le presentan al usuario?
A medida que trabajas en apps para públicos más grandes, es fundamental que tus apps sean accesibles para la mayor cantidad posible de tipos de usuarios. Por ejemplo:
- Muchos usuarios interactúan con los sistemas informáticos de diferentes maneras. Muchos usuarios son daltónicos, y los colores que contrastan para un usuario pueden no funcionar para otro. Muchos usuarios tienen problemas de visión, desde la necesidad de usar anteojos para leer hasta la ceguera.
- Algunos usuarios no pueden usar pantallas táctiles y, en cambio, interactúan a través de otros dispositivos de entrada, como botones.
Un buen diseño es la forma más importante de lograr que los usuarios usen tu app.
Estos codelabs son demasiado cortos para enseñarte todo sobre el diseño para Android, pero te ayudarán a comenzar en la dirección correcta y podrás seguir aprendiendo y desarrollándote por tu cuenta.
Conocimientos que ya deberías tener
Debes estar familiarizado con lo siguiente:
- Cómo crear apps con actividades y fragmentos, y navegar entre fragmentos pasando datos
- Usar vistas y grupos de vistas para diseñar una interfaz de usuario (IU), incluido
RecyclerView - Cómo usar los componentes de la arquitectura, incluido
ViewModel, con la arquitectura recomendada para crear una app eficiente y bien estructurada - Vinculación de datos, corrutinas y cómo controlar los clics
- Cómo conectarse a Internet y almacenar datos en caché de forma local con una base de datos de
Room - Cómo establecer las propiedades de la vista
- Cómo extraer recursos en archivos de recursos XML y usarlos desde ellos
Qué aprenderás
- Conceptos básicos del sistema de diseño de Android
- Cómo usar atributos, estilos y temas para personalizar tu app
Actividades
- Mejora el diseño de una app de inicio con atributos de vistas, estilos y temas
La app de inicio de GDG-finder se basa en todo lo que aprendiste hasta ahora en este curso.
La app usa ConstraintLayout para diseñar tres pantallas. Dos de las pantallas son solo archivos de diseño que usarás para explorar los colores y el texto en Android.
La tercera pantalla es un buscador de GDG. Los GDG, o Grupos de Google Developers, son comunidades de desarrolladores que se enfocan en las tecnologías de Google, incluido Android. Los GDG de todo el mundo organizan reuniones, conferencias, Study Jams y otros eventos.
A medida que desarrolles esta app, trabajarás en la lista real de GDG. La pantalla del buscador usa la ubicación del dispositivo para ordenar los GDG por distancia.
Si tienes suerte y hay un GDG en tu región, puedes visitar el sitio web y registrarte para asistir a sus eventos. Los eventos de GDG son una excelente manera de conocer a otros desarrolladores de Android y aprender las prácticas recomendadas de la industria que no se incluyeron en este curso.
En las siguientes capturas de pantalla, se muestra cómo cambiará tu app desde el comienzo hasta el final de este codelab.
|
|
Android proporciona un sistema de diseño enriquecido que te permite controlar la apariencia de todas las vistas de tu app. Puedes usar temas, estilos y atributos de vista para afectar el diseño. En el siguiente diagrama, se resume la precedencia de cada método de diseño. El diagrama de pirámide muestra el orden en que el sistema aplica los métodos de diseño, de abajo hacia arriba. Por ejemplo, si configuras el tamaño del texto en el tema y, luego, lo configuras de manera diferente en los atributos de la vista, los atributos de la vista anularán el diseño del tema.

Atributos de vista
- Usa atributos de vista para establecer atributos de forma explícita para cada vista. (Los atributos de vista no son reutilizables, como sí lo son los estilos).
- Puedes usar todas las propiedades que se pueden configurar a través de estilos o temas.
Se usa para diseños personalizados o únicos, como márgenes, padding o restricciones.
Estilos
- Usa un estilo para crear una colección de información de diseño reutilizable, como el tamaño de la fuente o los colores.
- Es útil para declarar conjuntos pequeños de diseños comunes que se usan en toda la app.
Aplicar un estilo a varias vistas, anulando el estilo predeterminado Por ejemplo, usa un diseño para crear encabezados o un conjunto de botones con un diseño coherente.
Estilo predeterminado
- Este es el diseño predeterminado que proporciona el sistema Android.
Temas
- Usa un tema para definir los colores de toda tu app.
- Usa un tema para establecer la fuente predeterminada de toda la app.
- Se aplica a todas las vistas, como las vistas de texto o los botones de selección.
- Se usa para configurar propiedades que puedes aplicar de manera coherente en toda la app.
TextAppearance
- Para aplicar diseño solo con atributos de texto, como
fontFamily
Cuando Android aplica un diseño a una vista, aplica una combinación de temas, diseños y atributos que puedes personalizar. Los atributos siempre anulan cualquier especificación de un tema o estilo. Además, los estilos siempre reemplazan cualquier elemento especificado en un tema.
En las siguientes capturas de pantalla, se muestra la app de GDG-finder con el tema claro (izquierda) y un tema oscuro (derecha), así como con una fuente y tamaños de encabezado personalizados. Esto se puede implementar de varias maneras, y aprenderás algunas de ellas en este codelab.
|
|
En esta tarea, usarás atributos para definir el estilo de los encabezados del texto en el diseño de la app.
- Descarga y ejecuta la app de inicio de GDG-finder.
- Observa que la pantalla principal tiene mucho texto con formato uniforme, lo que dificulta saber de qué se trata la página y qué es importante.
- Abre el archivo de diseño
home_fragment.xml. - Ten en cuenta que el diseño usa
ConstraintLayoutpara posicionar elementos dentro de unScrollView. - Ten en cuenta que, para cada vista, los atributos de diseño de restricción y margen se configuran en la vista, ya que estos atributos suelen personalizarse para cada vista y pantalla.
- En la vista de texto
title, agrega un atributotextSizepara cambiar el tamaño del texto a24sp.
Recuerda quespsignifica píxeles independientes de la escala, que se ajustan según la densidad de píxeles y la preferencia de tamaño de fuente que el usuario establece en la configuración del dispositivo. Android calcula qué tan grande debe ser el texto en la pantalla cuando lo dibuja. Siempre usasppara los tamaños de texto.
<TextView
android:id="@+id/title"
...
android:textSize="24sp"- Establece el
textColorde la vista de textotitleen gris opaco. Para ello, configúralo en un valor aRGB de#FF555555.
<TextView
android:id="@+id/title"
...
android:textColor="#FF555555"- Para abrir la pestaña Preview en Android Studio, selecciona View > Tool Windows > Preview o haz clic en el botón vertical Preview en el borde derecho del editor de diseño. En la vista previa, verifica que el título esté en gris y sea más grande que antes, como se muestra a continuación.

- Aplica un estilo al subtítulo para que tenga el mismo color que el encabezado, con una fuente más pequeña,
18sp. (El valor alfa predeterminado esFF, opaco. Puedes omitir el valor alfa si no lo cambias.
<TextView
android:id="@+id/subtitle"
...
android:textSize="18sp"
android:textColor="#555555"
- En este codelab, el objetivo es diseñar la app para que sea un poco caprichosa y, a la vez, se vea profesional, pero puedes diseñarla como quieras. Prueba los siguientes atributos para la vista de texto
subtitle. Usa la pestaña Preview para ver cómo cambia la apariencia de tu app. Luego, quita estos atributos.
<TextView
android:id="@+id/subtitle"
...
android:textAllCaps="true"
android:textStyle="bold"
android:background="#ff9999"- No olvides deshacer los atributos
textAllCaps,textStyleybackgroundde la vistasubtitleantes de continuar. - Ejecuta tu app, que ya debería verse mejor.

Cuando usas fuentes con tu app, puedes enviar los archivos de fuente necesarios como parte de tu APK. Si bien es simple, esta solución no se recomienda, ya que hace que la descarga e instalación de tu app demoren más.
Android permite que las apps descarguen fuentes en el tiempo de ejecución con la API de Downloadable Fonts. Si tu app usa la misma fuente que otra app en el dispositivo, Android solo la descarga una vez, lo que ahorra espacio de almacenamiento del dispositivo.
En esta tarea, usarás fuentes descargables para establecer la fuente de cada vista de tu app que use el tema.
Paso 1: Aplica una fuente descargable
- Abre
home_fragment.xmlen la pestaña Design. - En el panel Component Tree, selecciona la vista de texto
title. - En el panel Attributes, busca el atributo
fontFamily. Puedes encontrarlo en la sección All Attributes o simplemente buscarlo. - Haz clic en la flecha desplegable.
- Desplázate hasta Más fuentes y selecciónala. Se abrirá la ventana Resources.

- En la ventana Recursos, busca
lobstero sololo. - En los resultados, selecciona Lobster Two.
- A la derecha, debajo del nombre de la fuente, selecciona el botón de selección Create downloadable font. Haz clic en OK.
- Abre el archivo de manifiesto de Android.
- Cerca de la parte inferior del manifiesto, busca la nueva etiqueta
<meta-data>con los atributosnameyresourceestablecidos en"preloaded_fonts". Esta etiqueta indica a los Servicios de Google Play que esta app quiere usar fuentes descargadas. Cuando se ejecuta tu app y solicita la fuente Lobster Two, el proveedor de fuentes descarga la fuente de Internet si aún no está disponible en el dispositivo.
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts"/>- En la carpeta
res/values, busca el archivopreloaded_fonts.xml, que define el array que enumera todas las fuentes descargables para esta app. - Del mismo modo, el archivo
res/fonts/lobster_two.xmlcontiene información sobre la fuente. - Abre
home_fragment.xmly observa en el código y la vista previa que la fuente Lobster Two se aplica altitleTextViewy, por lo tanto, al título.

- Abre
res/values/styles.xmly examina el temaAppThemepredeterminado que se creó para el proyecto. Actualmente, se ve de la siguiente manera: Para aplicar la nueva fuente Lobster Two a todo el texto, deberás actualizar este tema. - En la etiqueta
<style>, observa el atributoparent. Cada etiqueta de estilo puede especificar un elemento superior y heredar todos sus atributos. El código especifica elThemedefinido por las bibliotecas de Android. El temaMaterialComponentsque especifica todo, desde cómo funcionan los botones hasta cómo dibujar barras de herramientas. El tema tiene valores predeterminados razonables, por lo que puedes personalizar solo las partes que desees. La app usa la versiónLightde este tema sin la barra de acciones (NoActionBar), como puedes ver en la captura de pantalla anterior.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>- Dentro del estilo
AppTheme, configura la familia de fuentes enlobster_two. Debes establecerandroid:fontFamilyyfontFamily, ya que el tema principal usa ambos. Puedes marcarhome_fragment.xmlen la pestaña Diseño para obtener una vista previa de los cambios.
<style name="AppTheme"
...
<item name="android:fontFamily">@font/lobster_two</item>
<item name="fontFamily">@font/lobster_two</item>- Vuelve a ejecutar la app. La nueva fuente se aplica a todo el texto. Abre el panel lateral de navegación y muévete a las otras pantallas. Verás que la fuente también se aplica allí.
| |
|
|
Paso 2: Aplica el tema al título
- En
home_fragment.xml, busca la vista de textotitle, que tiene el atributo para la fuentelobster_two. Borra el atributofontFamilyy ejecuta la app. Como el tema establece la misma familia de fuentes, no hay cambios. - Vuelve a colocar un atributo
fontFamilydiferente en la vista de textotitle:app:fontFamily="serif-monospace"Asegúrate de que esté en el espacioapp.
<TextView
android:id="@+id/title"
...
app:fontFamily="serif-monospace"- Ejecuta la app y verás que el atributo local para la vista anula el tema.

- Quita el atributo
fontFamilyde la vista de textotitle.
Los temas son ideales para aplicar temas generales a tu app, como una fuente predeterminada y colores principales. Los atributos son ideales para aplicar un diseño a una vista específica y agregar información de diseño, como márgenes, padding y restricciones, que suelen ser específicos para cada pantalla.
En el medio de la pirámide de jerarquía de estilos, se encuentran los estilos. Los estilos son "grupos" reutilizables de atributos que puedes aplicar a las vistas que elijas. En esta tarea, usarás un estilo para el título y el subtítulo.
Paso 1: Crea un diseño
- Abre
res/values/styles.xml. - Dentro de la etiqueta
<resources>, define un nuevo diseño con la etiqueta<style>, como se muestra a continuación.
<style name="TextAppearance.Title" parent="TextAppearance.MaterialComponents.Headline6">
</style>Es importante pensar en los nombres de los estilos como semánticos cuando los asignas. Selecciona un nombre de estilo según el uso que se le dará, no según las propiedades que afecta. Por ejemplo, llama a este estilo Title, no algo como LargeFontInGrey. Cualquier título de tu app usará este estilo. Como convención, los estilos TextAppearance se denominan TextAppearance.Name, por lo que, en este caso, el nombre es TextAppearance.Title.
El estilo tiene un elemento principal, al igual que un tema puede tener un elemento principal. Sin embargo, esta vez, en lugar de extender un tema, el estilo extiende un estilo, TextAppearance.MaterialComponents.Headline6. Este es un estilo de texto predeterminado para el tema MaterialComponents, por lo que, si lo extiendes, modificas el estilo predeterminado en lugar de comenzar desde cero.
- Dentro del nuevo diseño, define dos elementos. En un elemento, establece
textSizeen24sp. En el otro elemento, establecetextColoren el mismo gris oscuro que se usó antes.
<item name="android:textSize">24sp</item>
<item name="android:textColor">#555555</item>- Define otro estilo para los subtítulos. Asígnale el nombre
TextAppearance.Subtitle. - Como la única diferencia con
TextAppearance.Titleserá el tamaño del texto, haz que este estilo sea secundario deTextAppearance.Title. - Dentro del estilo
Subtitle, establece el tamaño del texto en18sp. Este es el estilo completo:
<style name="TextAppearance.Subtitle" parent="TextAppearance.Title" >
<item name="android:textSize">18sp</item>
</style>Paso 2: Aplica el estilo que creaste
- En
home_fragment.xml, agregaTextAppearance.Aplica el estiloTitlea la vista de textotitle. Borra los atributostextSizeytextColor.
Los temas anulan cualquier diseño deTextAppearanceque establezcas. (El diagrama de pirámide al comienzo del codelab muestra el orden en el que se aplica el diseño). Usa la propiedadtextAppearancepara aplicar el diseño como unTextAppearance, de modo que la fuente establecida enThemeanule lo que establezcas aquí.
<TextView
android:id="@+id/title"
android:textAppearance="@style/TextAppearance.Title"- También agrega el estilo
TextAppearance.Subtitlea la vista de textosubtitley borra los atributostextSizeytextColor. También debes aplicar este estilo como untextAppearancepara que la fuente establecida en el tema anule lo que estableciste aquí.
<TextView
android:id="@+id/subtitle"
android:textAppearance="@style/TextAppearance.Subtitle"- Ejecuta la app y verás que el texto ahora tiene un estilo coherente.

Proyecto de Android Studio: GDGFinderStyles
- Usa temas, estilos y atributos en las vistas para cambiar su apariencia.
- Los temas afectan el diseño de toda la app y vienen con muchos valores predeterminados para colores, fuentes y tamaños de fuente.
- Un atributo se aplica a la vista en la que se configura. Usa atributos si tienes un diseño que se aplica a una sola vista, como padding, márgenes y restricciones.
- Los estilos son grupos de atributos que pueden usar varias vistas. Por ejemplo, puedes tener un estilo para todos los encabezados de contenido, botones o vistas de texto.
- Los temas y los estilos heredan de su tema o estilo principal. Puedes crear una jerarquía de estilos.
- Los valores de los atributos (que se establecen en las vistas) anulan los estilos. Los diseños anulan el diseño predeterminado. Los diseños anulan los temas. Los temas anulan cualquier diseño establecido por la propiedad
textAppearance.

- Define estilos en el archivo de recursos
styles.xmlcon las etiquetas<style>y<item>.
<style name="TextAppearance.Subtitle" parent="TextAppearance.Title" >
<item name="android:textSize">18sp</item>
</style>El uso de fuentes descargables hace que las fuentes estén disponibles para los usuarios sin aumentar el tamaño de tu APK. Para agregar una fuente descargable a una vista, haz lo siguiente:
- Selecciona la vista en la pestaña Diseño y, luego, Más fuentes en el menú desplegable del atributo
fontFamily. - En el diálogo Recursos, busca una fuente y selecciona el botón de opción Crear fuente descargable.
- Verifica que el manifiesto de Android incluya una etiqueta de metadatos para las fuentes precargadas.
Cuando la app solicita una fuente por primera vez y esta aún no está disponible, el proveedor de fuentes la descarga de Internet.
Documentación para desarrolladores de Android:
- Estilos y temas
- Fuentes descargables
- Fuentes en XML
- Comprensión de sp
- Atributos de
TextView - Recurso de estilo
- Tema
MaterialComponents
Otros recursos:
- Cuál es la apariencia del texto
- Hexadecimal
- Developing Android Apps with Kotlin (curso de Udacity, en inglés)
- Kotlin Bootcamp for Programmers (curso de Udacity)
- Codelabs de la Capacitación de Kotlin para programadores
En esta sección, se enumeran las posibles actividades para el hogar para los alumnos que trabajan en este codelab como parte de un curso dirigido por un instructor. Depende del instructor hacer lo siguiente:
- Si es necesario, asigna una tarea.
- Comunicarles a los alumnos cómo enviar las actividades para el hogar.
- Califica las actividades para el hogar.
Los instructores pueden usar estas sugerencias en la medida que quieran y deben asignar cualquier otra actividad para el hogar que consideren apropiada.
Si estás trabajando en este codelab por tu cuenta, usa estas actividades para el hogar para probar tus conocimientos.
Responde estas preguntas:
Pregunta 1
¿Qué etiqueta se usa para definir temas?
▢ <style>
▢ <theme>
▢ <meta-tag>
▢ <styling>
Pregunta 2
¿Cuál de las siguientes opciones NO es un buen uso de los estilos?
▢ Especifica las restricciones de una vista.
▢ Especificar el color de fondo de los encabezados
▢ Unificar el tamaño de fuente en todas las vistas
▢ Especificar el color de texto para un grupo de vistas
Pregunta 3
¿Cuál es la diferencia entre los temas y los estilos?
▢ Los temas se aplican en toda la app, pero los estilos se pueden aplicar en vistas específicas.
▢ Los temas no se pueden heredar de otros temas, pero los estilos sí pueden heredarse de otros estilos.
▢ Los estilos no se pueden heredar de otros estilos, pero los temas sí pueden heredarse de otros temas.
▢ El sistema Android proporciona los temas, pero el desarrollador define los estilos.
Pregunta 4
Si un TextView en tu app tiene un Theme que establece el tamaño de la fuente en 12sp, un estilo definido que lo establece en 14sp y un atributo fontSize de 16sp, ¿cuál es el tamaño de la fuente que se muestra en la pantalla?
▢ 12sp
▢ 14sp
▢ 16sp
▢ 18sp
Comienza la siguiente lección:
Para obtener vínculos a otros codelabs de este curso, consulta la página de destino de los codelabs de Conceptos básicos de Kotlin para Android.






