我在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。