android - 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
但没有任何组合会产生良好的行为。从字面上看,我无法让它具有所需的外观。有时,一个片段有一个很好的状态栏,但如果我返回,状态栏在前一个片段上停止正常工作,依此类推。
有人可以教我如何做到这一点。
PS我不敢相信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);
}
推荐阅读
- java - 同一个实体有两个 FK 的实体
- c# - 使用多个 HTTPWebRequest 和 JSON 反序列化器循环缓慢
- laravel - laravel view::share,未定义的变量
- sql - SQL Server:如果在所有字段中存在与该行具有相同值的其他行,如何更新一行?
- rx-java - 为什么 rxjava2 共享运算符不进行多播?
- javascript - 如何保持页面不刷新?jQuery Ajax PHP
- spring-boot - 我们可以使用 Electron 工具为 Spring boot web mvc 创建独立的应用程序吗?
- oracle - JDBC Oracle UDT(用户定义类型)VARCHAR 值返回 `?`
- salt-stack - 如何获取要在其上运行盐的 salt-minion 的 FQDN
- typescript - 异步函数的返回类型必须是全局 Promise
类型