Android O上切换状态栏颜色的问题

Android O上切换状态栏颜色的问题,android,android-6.0-marshmallow,android-theme,android-8.0-oreo,Android,Android 6.0 Marshmallow,Android Theme,Android 8.0 Oreo,有些东西不起作用;我不知道这是仿真器的问题还是安卓Oreo上的bug(我没有安卓Oreo的物理设备),但我不能像棉花糖那样从黑暗状态栏切换到光明状态栏主题 styles.xml(来自api 23): ?属性/颜色初级 ?属性/颜色初级 真的 ?属性/颜色初级 ?属性/颜色初级 假的 这在安卓M上运行得很好,当我用setTheme()更改主题时,但在安卓O中,一旦我切换到灯光主题,它就不再更改,状态栏保持黑暗(windowLightStatusBar=true)/:这一定是一个错误,我已经向谷

有些东西不起作用;我不知道这是仿真器的问题还是安卓Oreo上的bug(我没有安卓Oreo的物理设备),但我不能像棉花糖那样从黑暗状态栏切换到光明状态栏主题

styles.xml(来自api 23):


?属性/颜色初级
?属性/颜色初级
真的
?属性/颜色初级
?属性/颜色初级
假的

这在安卓M上运行得很好,当我用
setTheme()
更改主题时,但在安卓O中,一旦我切换到灯光主题,它就不再更改,状态栏保持黑暗(windowLightStatusBar=true)/:

这一定是一个错误,我已经向谷歌报告了()

我使用这些代码来临时解决这个问题

// fix windowLightStatusBar not changed after applyStyle on Android O
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    final TypedArray a = obtainStyledAttributes(new int[]{android.R.attr.windowLightStatusBar});
    final boolean windowLightStatusBar = a.getBoolean(0, false);
    a.recycle();
    int flag = getWindow().getDecorView().getSystemUiVisibility();
    if (windowLightStatusBar) {
        flag |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    } else {
        flag &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    }
    getWindow().getDecorView().setSystemUiVisibility(flag);
}

这个变通方法对我很有效;它同样适用于
windowLightNavigationBar
。请注意,如果您使用的是
applyDayNight()
,它也会重新创建活动,因此此解决方案提到的代码仍应转到您的
onCreate()
方法。
// fix windowLightStatusBar not changed after applyStyle on Android O
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    final TypedArray a = obtainStyledAttributes(new int[]{android.R.attr.windowLightStatusBar});
    final boolean windowLightStatusBar = a.getBoolean(0, false);
    a.recycle();
    int flag = getWindow().getDecorView().getSystemUiVisibility();
    if (windowLightStatusBar) {
        flag |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    } else {
        flag &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    }
    getWindow().getDecorView().setSystemUiVisibility(flag);
}