AppCompat DayNight主题在Android 6.0上不起作用?

我正在使用Android Support Library 23.2添加的新Theme.AppCompat.DayNight

在Android 5.1上运行良好。

在Android 6.0上,活动看起来像使用灯光主题,但对话框看起来使用黑暗主题。

我的应用类:

 public class MyApplication extends Application { static { AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.MODE_NIGHT_YES); } } 

我的styles.xml

  @color/colorPrimary @color/colorPrimaryDark @color/colorAccent   

我的代码显示一个对话框:

 new AlertDialog.Builder(mContext, R.style.Dialog_Alert) .setTitle("Title") .setMessage("Message") .show(); 

谷歌已将其修复为支持23.2.1

老答案:

在Android 6.0上,系统的夜间模式设置defalut是UiModeManager.MODE_NIGHT_NO ,它会在调用onCreate之前更改Resources.Configuration.uiMode 。 但是,支持库在AppCompatActivity中的onCreate中应用其夜间模式设置,为时已晚,我认为这就是为什么它不适用于6.0。

因此,如果我们可以在AppCompatActivity覆盖getResources()并更改uiMode

老答案:

以下代码修复不适用于Android 6.0

 public class Application extends android.app.Application { static { AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.MODE_NIGHT_); } @Override public void onCreate() { super.onCreate(); // add this code for 6.0 // DO NOT DO THIS. It will trigger a system wide night mode. // This is the old answer. Just update appcompat. // UiModeManager uiManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE); // uiManager.setNightMode(UiModeManager.MODE_NIGHT_); } } 

注意:如果您的应用没有位置权限,则您的应用将不会具有相同的系统计算结果。 这意味着当系统没有时,可能支持库认为它是夜晚,这会导致你的一些UI看起来很暗。

最好的方法是等待谷歌修复它。

添加getDelegate().applyDayNight();setDefaultNightMode之后。

只需在您的值-v21中添加它

  

为我工作。

此问题已在https://code.google.com/p/android/issues/detail?id=201910上报告

但在Android支持库发布后,修订版23。2。1 (2016年3月)。 此问题已得到解决。

修复了夜间模式和API级别23的兼容性问题

将支持库更新到Android Support Library to 23.2.1