Construye una aplicación móvil sencilla con Material Design: crea una pantalla de inicio de sesión
Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)
Material Design es un sistema de diseño que ayuda a los equipos a crear experiencias digitales de alta calidad. Reúne estilo, interacción y movimiento para crear jerarquía, significado y continuidad en toda la aplicación.
Material Design viene con componentes de Material para Android, que son necesarios para garantizar que los desarrolladores generen hermosos diseños. En este tutorial obtendrás una descripción general de varios de estos componentes de Android y crearás una página de inicio de sesión usando Material Design.
La página de inicio de sesión contendrá los siguientes componentes:
- El logotipo de la aplicación
- Los campos de texto de nombre de usuario y contraseña
- Un botón para iniciar sesión
- Un enlace para restablecer la contraseña
Requisitos previos
- Conocimientos básicos sobre el desarrollo en Android
- Android Studio (obtén más información aquí si aún no lo tienes)
- Un emulador de Android o un dispositivo físico
Comienzo
Para crear un nuevo proyecto en Android Studio, selecciona la Actividad vacía y haz clic en Siguiente. Escribe un nombre, elige una ubicación y selecciona un nivel de API. Haz clic en Finalizar para crear el proyecto.
Agrega las dependencias del proyecto
Navega al archivo build.gradle del módulo de la aplicación y agrega la Biblioteca de soporte MDC de Android, como se muestra a continuación. Luego sincroniza el proyecto.
1 |
api 'com.google.android.material:material:1.1.0-alpha06' |
El diseño de la actividad principal
Ahora editaremos el diseño de la actividad principal, main_activity.xml. La actividad principal contiene un ConstraintLayout simple que actúa como contenedor para el componente TextView.
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android" |
3 |
xmlns:app="https://schemas.android.com/apk/res-auto" |
4 |
xmlns:tools="http://schemas.android.com/tools" |
5 |
android:layout_width="match_parent" |
6 |
android:layout_height="match_parent" |
7 |
tools:context=".MainActivity"> |
8 |
|
9 |
<TextView
|
10 |
android:layout_width="wrap_content" |
11 |
android:layout_height="wrap_content" |
12 |
android:text="Hello World!" |
13 |
app:layout_constraintBottom_toBottomOf="parent" |
14 |
app:layout_constraintLeft_toLeftOf="parent" |
15 |
app:layout_constraintRight_toRightOf="parent" |
16 |
app:layout_constraintTop_toTopOf="parent" /> |
17 |
|
18 |
</androidx.constraintlayout.widget.ConstraintLayout>
|
ConstraintLayout proporciona una interfaz con la funcionalidad de arrastrar y soltar que te permite colocar un widget determinado en relación con otro. Puedes restringir un widget en el eje horizontal y en el vertical.
Tema y colores de AppCompat
De forma predeterminada, el tema de nuestra aplicación está configurado como Theme.MaterialComponents.DayNight.DarkActionBar. Cambiémoslo a Theme.Appcompact.Light.DarkActionBar. El archivo theme.xml también define otros colores, como se muestra a continuación.
1 |
<resources xmlns:tools="http://schemas.android.com/tools"> |
2 |
<!-- Base application theme. -->
|
3 |
<style name="Theme.RUBBY" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> |
4 |
<!-- Primary brand color. -->
|
5 |
<item name="colorPrimary">@color/purple_500</item> |
6 |
<item name="colorPrimaryVariant">@color/purple_700</item> |
7 |
<item name="colorOnPrimary">@color/white</item> |
8 |
<!-- Secondary brand color. -->
|
9 |
<item name="colorSecondary">@color/teal_200</item> |
10 |
<item name="colorSecondaryVariant">@color/teal_700</item> |
11 |
<item name="colorOnSecondary">@color/black</item> |
12 |
<!-- Status bar color. -->
|
13 |
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> |
14 |
<!-- Customize your theme here. -->
|
15 |
|
16 |
<item name="colorOnBackground">@color/white</item> |
17 |
</style>
|
18 |
</resources>
|
El sistema de color nos permite cambiar rápidamente el esquema de colores de toda la aplicación.
-
colorPrimaryycolorSecondaryson los colores de tu marca.colorSecondaryproporciona más formas de acentuar partes seleccionadas de tu interfaz de usuario. -
colorPrimaryVariantycolorSecondaryVariantson tonos más claros o más oscuros decolorPrimaryycolorSecondary. -
colorOnPrimaryse usa para darle un tinte a los elementos mostrados encima de los colores primarios, como el texto y los iconos. -
colorOnSecondaryse usa para darle un tinte a los elementos mostrados encima de los colores secundarios, como el texto y los iconos. -
colorBackgroundes el color de fondo de tu aplicación.
El sistema de color de Material Design tiene como objetivo crear armonía en las aplicaciones. Los estándares de Google describen cómo crear una paleta de colores destinada a mejorar la experiencia del usuario. El siguiente diagrama muestra un ejemplo de una paleta de colores que se puede utilizar con Material Design.



Cómo usar la paleta de colores de Material Design
Al elegir los colores para tu aplicación, es recomendable limitarlos a tres tonos primarios y un color secundario. El color primario es el color que aparece con mayor frecuencia en las pantallas y los componentes de tu aplicación. Un color secundario es opcional y brinda contraste a tu aplicación. También puedes usar un color primario para proporcionar contraste. El color secundario debería ser usado para acciones específicas como las siguientes:
- Campos de texto y cursores
- Botones flotantes
- Selección de texto
- Barras de progreso
- Controles de selección, botones y controles deslizantes
- Enlaces
La interfaz de usuario a continuación muestra una representación del uso correcto del color en Material Design.



Componentes de Material Design
Como se mencionó anteriormente en el tutorial, las aplicaciones hechas con Material Design usan componentes de este último. Entre algunos de estos componentes se encuentran los siguientes:
- Menús y barra de herramientas de Android
- Botones de acción flotantes (BAF), snackbars y CoordinatorLayout
- Etiquetas flotantes
- AppBar
- Barra de herramientas colapsante
- Cajón y menús de navegación
- Animaciones de Android
- RecyclerView y CardView
Comencemos agregando el logotipo usando el componente ImageView de Material Design. Elimina el TextView y agrega lo siguiente a main_activity.xml.
1 |
<com.google.android.material.imageview.ShapeableImageView
|
2 |
android:id="@+id/logo" |
3 |
android:layout_width="0dp" |
4 |
android:layout_height="250dp" |
5 |
android:layout_margin="10dp" |
6 |
android:layout_marginTop="44dp" |
7 |
android:background="@drawable/logo" |
8 |
app:layout_constraintEnd_toEndOf="parent" |
9 |
app:layout_constraintHorizontal_bias="0.473" |
10 |
app:layout_constraintStart_toStartOf="parent" |
11 |
app:layout_constraintTop_toTopOf="parent" /> |
A continuación, agrega los campos de texto de nombre de usuario y contraseña. Usaremos el componente de campo de texto de Material Design, que incluye una función integrada que muestra una etiqueta flotante y mensajes de error.
1 |
<com.google.android.material.textfield.TextInputEditText
|
2 |
android:id="@+id/text_username" |
3 |
android:layout_width="match_parent" |
4 |
android:layout_height="40dp" |
5 |
android:layout_marginStart="8dp" |
6 |
android:layout_marginTop="52dp" |
7 |
android:layout_marginEnd="8dp" |
8 |
android:backgroundTint="#FFFFFF" |
9 |
android:hint="@string/username" |
10 |
android:inputType="text" |
11 |
app:layout_constraintEnd_toEndOf="parent" |
12 |
app:layout_constraintHorizontal_bias="0.0" |
13 |
app:layout_constraintStart_toStartOf="parent" |
14 |
app:layout_constraintTop_toBottomOf="@+id/logo" /> |
15 |
|
16 |
<com.google.android.material.textfield.TextInputEditText
|
17 |
android:id="@+id/password" |
18 |
android:layout_width="match_parent" |
19 |
android:layout_height="40dp" |
20 |
android:layout_marginStart="8dp" |
21 |
android:layout_marginTop="32dp" |
22 |
android:layout_marginEnd="8dp" |
23 |
android:hint="@string/password" |
24 |
android:inputType="textPassword" |
25 |
app:layout_constraintBottom_toBottomOf="parent" |
26 |
app:layout_constraintEnd_toEndOf="parent" |
27 |
app:layout_constraintHorizontal_bias="0.0" |
28 |
app:layout_constraintStart_toStartOf="parent" |
29 |
app:layout_constraintTop_toBottomOf="@+id/text_username" |
30 |
app:layout_constraintVertical_bias="0.0" /> |
El atributo android:inputType="textPassword" oculta el texto de entrada cuando alguien está escribiendo la contraseña.
No olvides agregar los recursos de tipo cadena correspondientes a los campos de texto en el archivo strings.xml.
1 |
<resources>
|
2 |
<string name="app_name">RUBBY</string> |
3 |
<string name="username">Username</string> |
4 |
<string name="password">Password</string> |
5 |
</resources>
|
Configura un recurso vectorial
Los recursos vectoriales te permiten configurar imágenes con un solo gráfico vectorial. Agreguemos recursos vectoriales para los campos de texto de nombre de usuario y contraseña. Ve a Dibujable > Nuevo > Recurso vectorial y elige una imagen prediseñada de persona para el campo de texto de nombre de usuario.



Repite el mismo proceso y selecciona un candado para el campo de texto de contraseña.
Ahora se han creado dos archivos XML en la carpeta drawable (dibujable), y puedes usar el archivo dibujable con el atributo android:drawableStart, como se muestra a continuación.
1 |
<com.google.android.material.textfield.TextInputEditText
|
2 |
|
3 |
android:id="@+id/username" |
4 |
android:drawableTint="#D500F9" |
5 |
android:drawableStart="@drawable/person" |
6 |
|
7 |
/>
|
8 |
1 |
<com.google.android.material.textfield.TextInputEditText
|
2 |
android:id="@+id/password" |
3 |
android:drawableStart="@drawable/lock" |
4 |
android:drawableTint="#D500F9" |
5 |
|
6 |
/>
|
La aplicación ahora debería verse así.



A continuación agrega el botón Iniciar sesión. Usaremos el componente Button de Material Design, que viene con un efecto de ondulación de tinta integrado.
1 |
<com.google.android.material.button.MaterialButton
|
2 |
android:id="@+id/login_button" |
3 |
android:layout_width="200dp" |
4 |
android:layout_height="wrap_content" |
5 |
android:text="@string/login" |
6 |
app:backgroundTint="@color/purple_200" |
7 |
app:layout_constraintBottom_toBottomOf="parent" |
8 |
app:layout_constraintEnd_toEndOf="parent" |
9 |
app:layout_constraintHorizontal_bias="0.498" |
10 |
app:layout_constraintStart_toStartOf="parent" |
11 |
app:layout_constraintTop_toBottomOf="@+id/password" |
12 |
app:layout_constraintVertical_bias="0.287" /> |
Por último, agrega el TextView de contraseña olvidada debajo del botón de inicio de sesión.
1 |
<com.google.android.material.textview.MaterialTextView
|
2 |
android:id="@+id/forgot_password" |
3 |
android:layout_width="wrap_content" |
4 |
android:layout_height="40dp" |
5 |
android:autoLink="web" |
6 |
android:text="@string/forgot_password" |
7 |
android:textColorLink="#00B0FF" |
8 |
android:textSize="22sp" |
9 |
app:layout_constraintBottom_toBottomOf="parent" |
10 |
app:layout_constraintEnd_toEndOf="parent" |
11 |
app:layout_constraintStart_toStartOf="parent" |
12 |
app:layout_constraintTop_toBottomOf="@+id/login_button" |
13 |
app:layout_constraintVertical_bias="0.347" /> |
Fondo redondo
Creemos un fondo redondo para los elementos. Ve a Dibujable > Nuevo recurso dibujable y agrega lo siguiente.
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<shape xmlns:android="http://schemas.android.com/apk/res/android"> |
3 |
<solid android:color="#F5F5F8"/> <!-- this one is ths color of the Rounded Button --> |
4 |
<corners
|
5 |
android:bottomRightRadius="10dp" |
6 |
android:bottomLeftRadius="10dp" |
7 |
android:topLeftRadius="10dp" |
8 |
android:topRightRadius="10dp"/> |
9 |
</shape>
|
Agrega el fondo a los campos de texto y al botón.
1 |
<com.google.android.material.textfield.TextInputEditText
|
2 |
..............................
|
3 |
android:id="@+id/username" |
4 |
android:background="@drawable/round_button" |
5 |
............./> |
6 |
<com.google.android.material.textfield.TextInputEditText
|
7 |
..............................
|
8 |
android:id="@+id/password" |
9 |
android:background="@drawable/round_button" |
10 |
............./> |
11 |
<com.google.android.material.button.MaterialButton
|
12 |
...................
|
13 |
android:id="@+id/login_button" |
14 |
android:background="@drawable/round_button" |
15 |
...................
|
16 |
/>
|
17 |
La aplicación final debería verse así:



Conclusión
En este tutorial, has aprendido algunos fundamentos de Material Design y has descubierto cómo aplicar colores en este último para que se ajusten a tu marca. La clave para una aplicación hermosa en Material Design radica en unir diferentes elementos mientras sigues sus principios. Para obtener más información, consulta los siguientes artículos:









