gpt4 book ai didi

android - AppCompat MODE_NIGHT_AUTO 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:42 25 4
gpt4 key购买 nike

AppCompatDelegate.MODE_NIGHT_AUTO 没有更新我现有的 Activity ,我不确定为什么。

我动态地允许用户更改夜间模式。如果用户将模式更改为自动,我将设置默认的夜间模式,然后重新创建 Activity :

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
recreate();

如果我更改为 MODE_NIGHT_YES 或 MODE_NIGHT_NO,它会按预期工作。如果我更改为 MODE_NIGHT_AUTO,它会进入正确的深色/浅色主题,但在从白天过渡到夜晚后它无法更新 Activity 。测试这个有点糟糕,因为我必须等待日出/日落(编辑:显然我可以手动更改设备上的时间而不必等待......只要不使用位置权限)。

我是否必须手动检查 onresume 中的夜间模式标志并手动更新现有 Activity 的资源,或者我做错了什么?如果我旋转设备并在日落后重新创建 Activity,则可以正确选择深色主题,但在旋转之前它仍将显示浅色主题。

支持lib 23.4.0, Android 6.0.

最佳答案

万一其他人想知道我做了什么来解决这个问题(尽管不确定这是否是正确的方法):

private int mCurrentNightMode;

@Override
protected void onCreate(Bundle savedInstanceState) {
mCurrentNightMode = getCurrentNightMode();
}

@Override
protected void onPostResume() {
super.onPostResume();

if (hasNightModeChanged()) {
delayedRecreate();
}

}

private void delayedRecreate() {
Handler handler = new Handler();
handler.postDelayed(this::recreate, 1);
}

private boolean hasNightModeChanged() {
getDelegate().applyDayNight();
return mCurrentNightMode != getCurrentNightMode();
}

private int getCurrentNightMode() {
return getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
}

关于android - AppCompat MODE_NIGHT_AUTO 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com