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?

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); } [...] } 
  • Biblioteca de soporte de Android 24.0.0 no muestra texto en SearchView
  • R.java no está generando debido a appcompat v7?
  • Android: RecyclerView dentro de un ScrollView (o paralaje)
  • Barra de herramientas de AppCompat v7 onOptionsItemSelected no llamado
  • Mientras uso la biblioteca de soporte técnico estoy recibiendo un error que el atributo "" ya ha sido definido en android
  • AppCompat v21 Barra de herramientas que cambia el tamaño del logotipo
  • Color de flecha de ActionBarDrawerToggle v7
  • Animación ActionBarDrawerToggle
  • ¿Cómo puedo configurar un tema diferente para el menú desplegable de un Spinner?
  • ¿Cómo crear la barra de herramientas con el botón personalizado a la izquierda?
  • AppCompat 21: name = colorPrimary no funciona junto con name = actionBarStyle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.