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); } [...] } 
  • Android: windowNoTitle no ocultará la barra de acción con appcompat-v7 21.0.0
  • El botón del diseño del material de la prensa larga permite pegar en la etiqueta del botón
  • Android 5.0 DatePicker con Theme.AppCompat
  • No se puede importar AppCompatActivity
  • SpannableString no funciona cuando se utiliza el tema de AppCompat
  • AppCompat v7: 21 ¿La barra de acción dividida está rota?
  • Android: Barra de herramientas Color del texto
  • Programaticamente tinte un vector de soporte
  • Cómo crear AppCompatDialog de AlertDialog.Builder o equivalente?
  • Cajón de navegación de derecha a izquierda con v7 ActionBarDrawerToggle
  • Cómo personalizar el color de AppCompatButton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.