Android -改变片段时不同的状态栏问题



我在Android上遇到了一个相当恼人的问题。

我有一个活动,里面有3个片段,所有的片段填满屏幕。设计师对设备状态栏的外观非常明确,这就是他所要求的:

  • 第一个片段:透明的状态栏,白色文本和一个背景图像,也落在状态栏后面。

  • 第二个片段:透明状态栏,黑色文本和背景图像也落在状态栏后面。

  • 第三个片段:使用自定义颜色和深色文本的状态栏,不让内容在其下。

考虑到它们都必须是单个活动中的片段,我已经玩了像WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,windowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR,decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN,decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE这样的旗帜,我究竟如何做到这一点

但没有组合导致良好的行为。实际上,我无法使它具有要求的外观。有时,一个片段有一个很好的状态栏,但如果我回去,状态栏停止正常工作在前一个片段,等等。

谁能教我怎样才能做到这一点?

注:有时候我真不敢相信Android是一个如此令人失望的操作系统。处理状态栏的外观应该是一行代码,易于使用,就像在iOS上一样....

在每个片段中使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.BLUE);
}

我是这样做的:

window.statusBarColor = ContextCompat.getColor(this, R.color.white)

记住,你也必须改变状态栏图标的颜色;)

window.decorView.windowInsetsController?.setSystemBarsAppearance(APPEARANCE_LIGHT_STATUS_BARS, APPEARANCE_LIGHT_STATUS_BARS)

我正在使用导航组件,并在活动我有一个导航更改监听器谁提供我当前片段的id。

最新更新