状态栏字体颜色未同步更改

时间:2019-04-23 22:28:53

标签: android

我正在根据自己的视图的滚动位置,将decorView的{​​{1}}更改为window为真与否。

由于我同时更改了ActionBar和Status Bar,因此我希望这两项更改至少应是瞬时的。但是我注意到在执行View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR与呈现新的状态栏模式之间存在50ms的延迟。我不想将我的工具栏更改放置在postDelay处理程序中,只是为了与状态栏更改协调它们的同时出现。我以为我可以覆盖window.decorView.systemUiVisibility = newIntWithToggledLightMode以便在状态栏ui更新后得到通知,但这只是在我使状态栏不可见时才触发,而不仅仅是更改外观模式。有没有人碰到这个问题并想出一个更优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

我刚刚调查过尝试复制您的问题,但没有遇到您在谈论的延迟...在我的示例中,我通过单击按钮模拟了背景变化的事件。希望对您有所帮助,我在这里分享我的代码:

活动属性

config.assets.paths << Rails.root.join('node_modules')
活动的onCreate中的

按钮初始化

private val isLight get () = (window.decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) > 0

setStatusBarColors()函数

button.setOnClickListener {
    if (isLight) {
        setStatusBarColors(
            decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv(),
            ContextCompat.getColor(decorView.context, android.R.color.holo_green_dark)
        )
    } else {
        setStatusBarColors(
            decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR,
            ContextCompat.getColor(decorView.context, android.R.color.holo_red_light)
        )
    }
}

此代码导致以下结果(如果未运行,请单击下面的GIF): enter image description here