AppCompat DayNight tema siempre aparece como un tema de luz?
Estoy utilizando el tema Theme.AppCompat.DayNight nuevo de AppCompat introducido en la versión 23.2 , pero en lugar de cambiar entre un día (luz) y noche (oscuro) tema automáticamente, siempre aparece como un tema de luz. ¿Cómo puedo conseguir que cambie a un tema oscuro?
- Android spinner con subrayado appcompat
- Barra de herramientas de AppCompat: Cambiar color de icono de desbordamiento en ActionMode
- Cómo cambiar la anchura de Android PopupMenu
- Cómo animar el icono del menú de desbordamiento de la barra de herramientas
- El título de la barra de herramientas (SupportActionBar) cambia al nombre de la aplicación en el cambio de orientación
- Cambiar el color de texto del título de ActionBar usando el tema Light.DarkActionBar en AppCompat 21
- SwitchCompat en barra de acción, con fragmento
- El icono de la aplicación no se muestra en la barra de acción
- Diferencia entre una vista de AppCompat y una vista de Android normal
- Mi FloatingActionButton tiene algunas líneas extrañas que salen de él en 4.4 y menor
- Colorear botones en Android con AppCompat
- Android appcompat API 10 vista de acción de contracción
- No se encontraron recursos Errores de soporte: appcompat-v7: 22.0.0 en Android Studio
Como se especifica en ese mismo blog 23.2 ,
Por defecto, si es 'noche' coincidirá con el valor del sistema (de UiModeManager.getNightMode () )
Sin embargo, a partir de ahora, esto significa efectivamente que es equivalente a MODE_NIGHT_NO
como lo único que desencadena el modo de noche son los muelles de coches de la era Gingerbread.
Esto significa que en los dispositivos actuales, la única manera de ver un tema oscuro cuando se utiliza un tema de DayNight es utilizar NIGHT_MODE_YES o NIGHT_MODE_AUTO
Como se indica tanto en el puesto oficial como en el puesto de Chris Banes en DayNight , puede cambiar el modo en el nivel global o local.
El nivel global se basa en el AppCompatDelegate.setDefaultNightMode()
estático AppCompatDelegate.setDefaultNightMode()
, que establece el modo DayNight en toda la aplicación. Como esto sólo se aplica mientras su proceso está vivo (es decir, sólo es un indicador de memoria), debe asegurarse de configurarlo cada vez que se inicie la aplicación. Una aproximación recomendada del poste de Chris para hacer eso es fijarla en un método estático de su clase de encargo de la aplicación:
static { AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.MODE_NIGHT_...); } public class MyApplication extends Application {
Si, en cambio, sólo desea cambiar el modo de una sola actividad / diálogo, puede llamar a getDelegate().setLocalNightMode()
:
public class MyActivity extends AppCompatActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { // Set the local night mode to some value getDelegate().setLocalNightMode( AppCompatDelegate.MODE_NIGHT_...); // Now recreate for it to take effect recreate(); } } }
Esto cambia sólo la instancia única – notará la llamada a recreate()
– Las vistas que ya han sido infladas no se verán afectadas por un cambio en el modo nocturno, por lo que puede forzar la actividad a volver a crear para obtener los valores actualizados .
Por supuesto, el poste de Chris también estados
También recuerde que el valor predeterminado es MODE_NIGHT_FOLLOW_SYSTEM, por lo que si agregamos una configuración visible al usuario a la plataforma en el futuro, AppCompat la utilizará automáticamente.
Parece que hay un error en Android Lollipop con AppCompat 23.2.0 : Google Issue Tracker
El código siguiente sólo funciona pre-Lollipop:
public class MyApplication extends Application { static { AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.MODE_NIGHT_YES); } [...] }
- ¿Cómo mostrar el diálogo en el método onCreate?
- Abrir la página de Facebook a través de la aplicación de Facebook