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?

2 Solutions collect form web for “AppCompat DayNight tema siempre aparece como un tema de luz?”

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); } [...] } 
  • Error de tema de diseño de material
  • No puedo compilar mi proyecto android
  • AppCompat Snackbar no centrado en la tableta
  • AppCompatv7 Edición de Android 5.0
  • El icono de la aplicación no se muestra en la barra de acción
  • ¿Cómo crear la barra de herramientas con el botón personalizado a la izquierda?
  • Android - capaz de utilizar AppCompatActivity sin la biblioteca de soporte
  • Diferentes estilos de colorControlActivated en Android
  • Cómo agregar un botón de acción flotante, sin AppCompat?
  • Barra de herramientas que no aparece en los dispositivos pre lollipop
  • Cómo utilizar support.v7.preference con AppCompat y posibles inconvenientes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.