es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Android 12 y detección de material you.

Estoy intentando actualizar mi tema con el nuevo Material You, funciona cuando selecciono un color en el parámetro de Android (parte roja de la captura de pantalla), pero cuando lo desactivo (parte azul), tengo el color predeterminado del valor establecido en el SDK xml.
Ejemplo con: @android:color/systemaccent10

Quiero saber cómo verificar si el usuario lo selecciona o no (parte roja o azul en la captura de pantalla), de esta manera usaré otro tema cuando esté desactivado. Supongo que necesito usar el nuevo método: applyToActivitiesIfAvailable:

@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
DynamicColors.applyToActivitiesIfAvailable(this, R.style.AppDynamicTheme, (activity, themeResId) -> {
// …implemente su propia lógica aquí. Regrese “verdadero” si se deben aplicar colores dinámicos.
return true; // <- ¿Cómo saber si está habilitado o deshabilitado en el parámetro de Android ?
});}

Mi segunda pregunta es acerca del icono de la aplicación, cuando pongo el color en blanco en el fondo de ic_launcher.xml funciona, pero no con otro color, ¿sabes por qué?

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para comprobar si el usuario ha seleccionado un color o no, puedes utilizar el siguiente código en combinación con la clase DynamicColors y el método applyToActivitiesIfAvailable:

    @Override
    public void onCreate() {
        super.onCreate();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            DynamicColors.applyToActivitiesIfAvailable(this, R.style.AppDynamicTheme, (activity, themeResId) -> {
                TypedArray typedArray = activity.getTheme().obtainStyledAttributes(themeResId, new int[]{android.R.attr.colorAccent});
                int colorAccent = typedArray.getColor(0, 0);
                typedArray.recycle();
    
                // Comprueba si el usuario ha seleccionado un color o no
                if (colorAccent == getResources().getColor(android.R.color.system_accent1_0)) {
                    // El usuario ha seleccionado un color
                } else {
                    // El usuario no ha seleccionado un color
                }
    
                return true;
            });
        }
    }
    

    Este código recupera el acento de color seleccionado del tema y lo compara con el color de acento del sistema. Si coinciden, significa que el usuario ha seleccionado un color.

    En cuanto a tu segunda pregunta acerca del icono que no funciona con otros colores, es difícil decirlo sin ver tu código. Asegúrate de que estás utilizando el código de color correcto y que está en el formato correcto. También es posible que el icono no sea compatible con ciertos colores.

Comments are closed.