我正在使用Android支持库23.2中新增的主题.AppCompat.DayNight
在安卓5.1上,它运行良好
在安卓6.0上,活动看起来像是使用浅色主题,而对话框看起来像是使用深色主题
我的申请类别:
公共类MyApplication扩展应用程序{
静止的{
AppCompatDelegate.setDefaultNightMode(
应用程序(模式\夜间\是);
}
}
My styles.xml
<;style name=“AppTheme”parent=“Theme.AppCompat.DayNight”>;
<;项目名称=“colorPrimary”&[email protected]彩色/彩色原色</项目>;
<;项目名称=“colorPrimaryDark”&[email protected]颜色/原色深</项目>;
<;项目名称=“colorAccent”&[email protected]颜色/颜色重音</项目>;
</风格>;
<;style name=“Dialog.Alert”parent=“Theme.AppCompat.DayNight.Dialog.Alert”/>;
显示对话框的我的代码:
新建AlertDialog.Builder(mContext,R.style.Dialog\u Alert)
.setTitle(“标题”)
.setMessage(“消息”)
.show();
谷歌已经在支持23.2.1中修复了它
旧答案:
在Android 6.0上,系统的夜间模式设置defalut是UiModeManager.mode\u night\u NO,它将在调用onCreate之前更改资源.Configuration.uiMode。但是,在AppCompatActivity中的onCreate中,支持库应用其夜间模式设置,为时已晚,我认为这就是为什么它不能在6.0上工作的原因
因此,如果我们可以覆盖AppCompatActivity中的getResources(),并更改uiMode
旧答案:
以下是修复Android 6.0上不可用的代码
公共类应用程序扩展了android.app.Application{
静止的{
AppCompatDelegate.setDefaultNightMode(
应用程序(模式为夜间);
}
@凌驾
public void onCreate(){
super.onCreate();
//为6.0添加此代码
//不要这样做。它将触发系统范围的夜间模式。
//这是旧答案。只需更新appcompat。
//UiModeManager uiManager=(UiModeManager)getSystemService(Context.UI\u MODE\u SERVICE);
//uiManager.setNightMode(UiModeManager.MODE\u nightmode);
}
}
注意:如果你的应用没有位置权限,你的应用将不会有相同的系统计算结果。这意味着支持库可能认为现在是晚上,而系统不在,这将导致您的一些UI看起来很暗
最好的办法是等待谷歌修复它