Con este artículo se inaugura la zona Android, implementaciones rápidas, sin problemas y entendibles para nosotros los retrasados que no leemos la documentación.
Son muchas las formas de implementar el tema oscuro o de noche en una aplicación, una de estas formas nos la brinda la librería Appcompat del paquete de librerías AndroidX, que a partir de la Api 28 introduce una serie de mejoras enfocadas a estandarizar su uso y relacionarlo a los ámbitos diarios.
NOTA
Algunas funciones como la asignación de tema automático o según el consumo de batería están disponibles solo para la Api 28(Android 9).
Ingredientes
En el build.gradle de la aplicación, agregamos la dependencia o si la tenemos la actualizamos por:
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
Preparación
Dentro de la carpeta values/styles/, encontramos los archivos de nuestro tema.
• Styles.xml
• Styles.xml (21)
Editamos el primero, y cambiamos la herencia de nuestro tema por defecto, que es Theme.AppCompat.Light.DarkActionBar, debe quedar algo como lo siguiente:
name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar"
name="colorAccent">@color/colorAccent
name="android:windowTranslucentNavigation">true
name="android:navigationBarColor">@android:color/transparent
En caso de tener un NavigationDrawer, editar herencia de este tema:
name="AppTheme.PopupOverlay" parent="Theme.AppCompat.DayNight.DarkActionBar"
Creamos las mecánicas del manejador apoyándonos del uso de una preferencia.
SharedPreferences mDefaultPreferences; mDefaultPreferences = PreferenceManager.getDefaultSharedPreferences (this);
if (isChecked)
{
mDefaultPreferences.edit ().putBoolean ("dark_mode", true).apply ();
AppCompatDelegate.setDefaultNightMode (AppCompatDelegate.MODE_NIGHT_YES);
}
else
{
mDefaultPreferences.edit ().putBoolean ("dark_mode", false).apply ();
AppCompatDelegate.setDefaultNightMode (AppCompatDelegate.MODE_NIGHT_NO);
}
Ejemplo de implementación en un NavigationDrawer:
Repositorio del Ejemplo
Fuente del background
Fraternalmente I.I. Daniel Rosillo;
- Project Manager at Rosillo Labs