Para aumentar el tráfico de usuarios de la aplicación de Android, es necesario ajustar el tema y el estilo de la aplicación de Android. En el desarrollo de aplicaciones móviles de hoy en día, también es necesario tener en cuenta la apariencia de la aplicación. Una característica importante en las necesidades del usuario de la aplicación es el tema oscuro. El tema predeterminado para los dispositivos Android era oscuro hasta Android lollipop (5.0), pero Android Q se lanzó en el tercer trimestre de 2019. La mayoría de las aplicaciones implementaron su versión de tema oscuro de la aplicación. En este artículo, se ilustra cómo implementar la versión del tema Material Dark de la aplicación de Android.
¿Por qué tema oscuro?
Los temas oscuros reducen la luminancia emitida por las pantallas de los dispositivos móviles, lo que reduce la fatiga visual. Manteniendo también el mínimo contraste de color. Esto también ayuda en el diseño funcional de la aplicación. Consume menos energía de la batería, ajustándose a la condición actual de luz. Los dispositivos con pantallas OLED pueden beneficiarse de los temas oscuros. Lo que es más importante, hay más fanáticos de la versión del tema oscuro de la aplicación.
Comprender la diferencia entre estilos y temas.
- Los desarrolladores de Android son testigos de la ambigüedad en estilos y temas. La razón es que en Android solo hay nombres de etiqueta <style> , no hay ninguna etiqueta <theme> disponible.
- El estilo es una colección de atributos que definen la apariencia de una sola vista. Los atributos de estilo son la fuente, el color, el tamaño, el color de fondo, etc. Por ejemplo, el tamaño de la fuente puede ser diferente para el encabezado y el cuerpo.
- El tema , por el contrario, se aplica a toda la aplicación, actividad o jerarquía de vista, no solo para vistas individuales. Los temas también pueden aplicar estilos a elementos que no son de vista, como la barra de estado, el fondo de la ventana, etc. Por ejemplo, colorPrimary se aplica a todos los botones de acción flotantes o botones normales de toda la aplicación. Uno puede obtener la diferencia en la siguiente imagen.
- La imagen de arriba puede ver claramente la diferencia entre los estilos y el tema. Donde el estilo se aplica para la vista particular dentro del grupo Vista principal, pero el tema se aplica a todo el grupo de vista principal.
- Pero los estilos y los temas van de la mano. Por ejemplo, el botón de acción flotante y los botones normales en los que se puede hacer clic pueden tener diferentes colores, como colorPrimary y colorSecondary, respectivamente.
Propiedades de tematización de materiales
Las 3 propiedades principales para lograr un tema de material funcional en la aplicación de Android son:
- Color
- Tipografía
- Forma
- Componentes de diseño de materiales
- Uno puede obtener la información básica sobre estas propiedades puede consultar Introducción al diseño de materiales en Android
- Uno puede haber visto en la actualización reciente de Android Studio (4.1 y superior) Las propiedades de color se hacen diferentes. Esos son:
Variantes de colores primarios:
Atributo |
Descripción |
Valor por defecto |
---|---|---|
colorprimario | Este color color primario de la aplicación. Este color es el color más utilizado en la Aplicación. Esto también se puede llamar un color de marca. | #FF6200EE |
colorPrimaryVariant | Esta es la variante del colorPrimary. Esta puede ser una variante más clara o más oscura del color primario. | #FF3700B3 |
colorOnPrimary | El propio nombre indica el color que debe asignarse a aquellos elementos que están por encima de colorPrimary. | #FFFFFFFF |
Variantes de colores secundarios:
Atributo |
Descripción |
Valor por defecto |
---|---|---|
colorsecundario | El color más utilizado después de colorPrimary. Este color es un color complementario acentuado del colorPrimary. | #FF03DAC5 |
colorSecondaryVariant | Esta es una variante de colorSecondary. Esta puede ser una variante más clara o más oscura del colorSecondary. | #FF018786 |
colorOnSecundario | Este nombre también indica que el color debe asignarse a aquellos elementos que están por encima de colorSecondary. | #FF000000 |
Colores de la superficie:
Atributo |
Descripción |
Valor por defecto |
---|---|---|
colorSuperficie | Color de la superficie que afecta a los componentes de la superficie, como tarjetas, hojas, menús. | #FFFFFF |
colorSobreSuperficie | Este color se asigna a los textos o iconos que están encima de colorSurface | #000000 |
Colores para errores:
Atributo | Descripción | Valor por defecto |
---|---|---|
colorError | Esto indica el color asignado a los elementos que indican el error. | #B00020 |
colorOnError | El color que se asigna a los textos o iconos que están encima de colorError. | #FFFFFF |
Tipografía:
Hay variantes tipográficas predefinidas y bien diseñadas del texto en el sistema Tipografía de diseño de materiales. Echa un vistazo a la siguiente imagen:
Estos son, por defecto, los atributos que vienen con el tema Material Design y se pueden aplicar directamente a TextViews según el contexto del texto en la aplicación.
Pasos para implementar la variante Dark Theme de la Aplicación
Paso 1: Cree un proyecto de Android Studio de actividad vacío:
Cree un proyecto de Android Studio de actividad vacío y seleccione Kotlin como lenguaje de programación. Consulte Android | ¿Cómo crear/comenzar un nuevo proyecto en Android Studio? .
Paso 2: Agrega la dependencia requerida
- Agregue la siguiente dependencia al archivo Gradle de nivel de aplicación y sincronice el proyecto.
- Sin embargo, esta dependencia se agrega de forma predeterminada cuando se crea el nuevo proyecto de Android Studio (versión 4.0 y superior).
implementación ‘com.google.android.material:material:1.3.0-alpha04’
Paso 3: agregar los colores de marca principal y secundario
- Necesitamos decidir principalmente el color primario y secundario, y sacar el código de color. En este caso, el Color Primario es el verde y como complemento se encuentra el rojo_200 y el rojo_700 como colores Secundarios de la marca.
- Uno puede hacer sus propias muestras de color y combinación usando this o this .
- Invoque los siguientes colores para implementar lo mismo en la aplicación dentro del archivo colors.xml.
XML
<?xml version="1.0" encoding="utf-8"?> <resources> <!--Primary colors of the application--> <color name="green_200">#98d5b0</color> <color name="green_light">#e5f5eb</color> <color name="green_500">#18ad62</color> <color name="green_700">#008c4c</color> <!--Secondary brand color of the application--> <color name="red_200">#eb8baf</color> <color name="red_700">#b31058</color> <!--Other surface colors and red for error color--> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> <color name="red">#B00020</color> </resources>
Paso 4: trabajar con los archivos themes.xml
- En primer lugar, aplicar el tema DayNight DarkActionBar tanto al tema claro como al tema oscuro de la aplicación de la siguiente manera:
<style name=”Theme.GFGArticle” parent=”Theme.MaterialComponents.DayNight.DarkActionBar”>
- Siguiendo el Sistema de color proporcionado por las Pautas de diseño de materiales como se mencionó anteriormente, a continuación se muestra el sistema de color aplicado para el tema claro y el tema oscuro de la aplicación.
- Los siguientes valores\theme.xml se aplican cuando la aplicación está bajo el tema claro.
XML
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.GFGArticle" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/green_500</item> <item name="colorPrimaryVariant">@color/green_700</item> <item name="colorOnPrimary">@color/white</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/teal_200</item> <item name="colorSecondaryVariant">@color/teal_700</item> <item name="colorOnSecondary">@color/black</item> <!-- Status bar color. --> <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> <!-- Customize your theme here. --> </style> </resources>
- Los siguientes valores-night\themes.xml se aplican cuando la aplicación tiene un tema oscuro.
XML
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.GFGArticle" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/green_200</item> <item name="colorPrimaryVariant">@color/green_700</item> <item name="colorOnPrimary">@color/black</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/red_200</item> <item name="colorSecondaryVariant">@color/red_200</item> <item name="colorOnSecondary">@color/black</item> <!-- Status bar color. --> <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> <!-- Customize your theme here. --> </style> </resources>
- Eche un vistazo a las siguientes imágenes donde residen estos archivos dentro del Proyecto Android Studio.
Paso 5: trabajar con el archivo activity_main.xml
- El diseño principal de la aplicación consiste en el sistema Material Design Type. Y un botón de acción flotante extendida y un botón de acción flotante normal para demostrar el color de la marca secundaria de la aplicación.
- Todas las vistas de texto en el diseño heredan el estilo del sistema de tipo Material. Por ejemplo, “estilo=”@estilo/TextAppearance.MaterialComponents.Headline4”.
XML
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" tools:ignore="HardcodedText"> <!--Switch button to toggle between the Light and Dark Mode--> <com.google.android.material.switchmaterial.SwitchMaterial android:id="@+id/switchMaterial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:checked="false" android:text="SWITCH TO DARK MODE" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" android:clipToPadding="false" android:orientation="vertical" android:padding="16dp" app:layout_constraintBottom_toTopOf="@+id/extendedFloatingActionButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/switchMaterial"> <!--TextView with the Headline 4 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Headline4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HEADLINE 4" /> <!--TextView with the Headline 5 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Headline5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HEADLINE 5" /> <!--TextView with the Headline 6 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Headline6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HEADLINE 6" /> <!--TextView with the Subtitle 1 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Subtitle1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBTITLE 1" /> <!--TextView with the Subtitle 2 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Subtitle2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBTITLE 2" /> <!--TextView with the Body 1 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Body1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Body 1" /> <!--TextView with the Body 2 as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Body2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Body 2" /> <!--TextView with the Buttons as Material type system--> <!--However this type system is applied to text inside the buttons only--> <TextView style="@style/TextAppearance.MaterialComponents.Button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TEXT VIEW FOR BUTTON" /> <!--TextView with the Caption as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Caption" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Caption" /> <!--TextView with the Overline texts as Material type system--> <TextView style="@style/TextAppearance.MaterialComponents.Overline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OVERLINE" /> <!--Buttons to demonstrate, how Material dark theme changes the primary color's contrast when switched from light theme to dark theme--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BUTTON 1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BUTTON 2" /> </LinearLayout> <!--Floating action buttons to demonstrate how the secondary brand color of the application can be used--> <com.google.android.material.floatingactionbutton.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:src="@drawable/ic_add" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton android:id="@+id/extendedFloatingActionButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginBottom="16dp" android:text="EXTENDED FAB" app:icon="@drawable/ic_add" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Interfaz de usuario de salida:
Paso 6: trabajar con el archivo MainActivity.kt
Dentro del archivo MainActivity.kt se ha manejado el detector de cambio verificado del botón de cambio de material. Y si el dispositivo no admite el tema oscuro de la aplicación, este proyecto en sí admite la versión de tema oscuro para todo tipo de API.
Kotlin
package com.aditya.gfgarticle import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.appcompat.app.AppCompatDelegate import com.google.android.material.switchmaterial.SwitchMaterial class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Instance for the material switch val switchMaterial: SwitchMaterial = findViewById(R.id.switchMaterial) // handle the checked changes for the material switch switchMaterial.setOnCheckedChangeListener { buttonView, isChecked -> when (isChecked) { // if checked toggle to dark mode true -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // if unchecked toggle back to light mode false -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) } } } }
Producción:
Publicación traducida automáticamente
Artículo escrito por adityamshidlyali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA