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

我正在使用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]彩色/彩色原色&lt/项目>
<项目名称=“colorPrimaryDark”&[email protected]颜色/原色深&lt/项目>
<项目名称=“colorAccent”&[email protected]颜色/颜色重音&lt/项目>
&lt/风格>
<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看起来很暗

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

发表评论