En esta página, se incluyen detalles sobre las mejoras opcionales de widgets que están disponibles a partir de Android 12 (nivel de API 31). Estas funciones son opcionales, pero son fáciles de implementar y mejoran la experiencia de los usuarios con los widgets.
Cómo usar colores dinámicos
A partir de Android 12, un widget puede usar los colores del tema del dispositivo para botones, fondos y otros componentes. Esto proporciona transiciones más fluidas y coherencia en distintos widgets.
Existen dos maneras de lograr colores dinámicos:
Usa el tema predeterminado del sistema (
@android:style/Theme.DeviceDefault.DayNight
) en el diseño raíz.Usa el tema Material 3 (
Theme.Material3.DynamicColors.DayNight
) de la biblioteca de Componentes de Material para Android, disponible a partir de la versión 1.6.0 de Componentes de Material para Android.
Una vez que se establece el tema en el diseño raíz, puedes usar atributos de color comunes en la raíz o en cualquiera de sus elementos secundarios para captar los colores dinámicos.
Estos son algunos ejemplos de atributos de color que puedes usar:
?attr/primary
?attr/primaryContainer
?attr/onPrimary
?attr/onPrimaryContainer
En el siguiente ejemplo, que usa el tema Material 3, el color del tema del dispositivo es "morado". El color de los elementos destacados y el fondo del widget se adaptan a los modos claro y oscuro, como se muestra en las figuras 1 y 2.
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimaryContainer"
android:theme="@style/Theme.Material3.DynamicColors.DayNight">
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />


Retrocompatibilidad con colores dinámicos
Los colores dinámicos solo están disponibles en dispositivos con Android 12 o versiones posteriores. Para proporcionar un tema personalizado para versiones anteriores, crea un tema predeterminado con tus colores personalizados y un nuevo calificador (values-v31
) con los atributos del tema predeterminado.
Este es un ejemplo en el que se usa el tema Material 3:
/values/styles.xml
/values-v31/styles.xml