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.

Selector separado de día/noche para el color del texto del botón.

Creé un selector personalizado para el color del texto del botón:

xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?android:attr/textColorPrimary" android:state_enabled="true" />
<item android:alpha="0.38" android:color="?android:attr/textColorPrimary" />
</selector>

Sin embargo, me gustaría usar ?android:attr/textColorPrimary para el color en el tema nocturno y ?android:attr/colorPrimary en el tema diurno. ¿Cómo puedo lograr esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes crear otro selector para el modo nocturno, que anula los valores de color del selector existente. Por ejemplo:

    <!-- Selector personalizado para el color del texto del botón en el modo de día -->
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="?android:attr/colorPrimary" android:state_enabled="true"></item>
        <item android:alpha="0.38" android:color="?android:attr/colorPrimary"></item>
    </selector>
    
    <!-- Selector personalizado para el color del texto del botón en el modo nocturno -->
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="?android:attr/textColorPrimaryInverse" android:state_enabled="true"></item>
        <item android:alpha="0.38" android:color="?android:attr/textColorPrimaryInverse"></item>
    </selector>
    

    Luego, en el tema de tu aplicación, puedes especificar los selectores apropiados para los modos de día y noche:

    <!-- Tema de la aplicación para el modo de día -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="android:buttonStyle">@style/ButtonDayStyle</item>
    </style>
    
    <!-- Tema de la aplicación para el modo nocturno -->
    <style name="AppThemeNight" parent="Theme.AppCompat">
        <item name="android:buttonStyle">@style/ButtonNightStyle</item>
    </style>
    
    <!-- Estilo de botón para el modo de día -->
    <style name="ButtonDayStyle" parent="Widget.AppCompat.Button">
        <item name="android:textColor">@drawable/custom_selector_day</item>
    </style>
    
    <!-- Estilo de botón para el modo nocturno -->
    <style name="ButtonNightStyle" parent="Widget.AppCompat.Button">
        <item name="android:textColor">@drawable/custom_selector_night</item>
    </style>
    

    Finalmente, en tu código, puedes establecer el tema apropiado según la hora del día o la preferencia del usuario:

    if (isNightModeEnabled()) {
        setTheme(R.style.AppThemeNight);
    } else {
        setTheme(R.style.AppTheme);
    }
    

Comments are closed.