android - 如何在系统栏下使用视图绘制布局?
问题描述
我必须进行布局,布局的顶部应该绘制在SystemBars
. (此应用的最低 API 级别为 22)
我设置了这些标志来实现这一点。在其他活动中,我可以绘制带有视图的整个片段SystemBars
,但在这里我不能这样做。
我使用此代码允许在下面绘制布局SystemBars
window.apply {
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
statusBarColor = resources.getColor(android.R.color.transparent)
navigationBarColor = resources.getColor(android.R.color.transparent)
setBackgroundDrawable(background)
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
这是应用程序中的结果:
我需要在系统栏下绘制那个灰色区域。
更新:
@Redman解决方案仅部分起作用。现在我可以在下面绘制,StatusBar
也可以在软件按钮 ( navigationButtons
) 下绘制,如下面的屏幕所示。有什么办法可以允许在下面绘制布局SystemBars
但不允许在下面绘制navigationButtons
?因为我发布的代码适用于应用程序中的不同片段。但在其他片段中,我没有ImageView
作为ToolBar
. 如果您只有ToolBar
例如 2-color 渐变背景和一些backButton
+ SearchView
,它工作正常。但正如我所补充ImageView
的,ImageView
不会在 top 下“滑动” SystemBar(aka StatusBar)
。即使在上图中,您也可以清楚地看到绿色(它是绘制在下方的工具栏背景StatusBar
)。但ImageView
不允许在该栏下绘制。
实现这一目标的唯一方法是使用那行特殊的代码
window.apply {
setFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}
但是这条线也允许在下面绘制布局内容NavigationButtons
(这是一个问题)。
解决方案
在您的Activity
主题中添加这些属性
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
并在父布局中添加属性
android:fitsSystemWindows="true"
编辑
尝试以编程方式执行此操作,它应该可以在具有 kitkat 及更高版本的设备上运行
window.apply {
setFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}
推荐阅读
- json - 如何以 Json 格式、键和值保存而不重复 ansible 事实
- python - Pandas 将每列与前 4 行聚合在一起
- reactjs - 检查字段是否有效 Formik React JS
- angular - 为什么内容投影不适用于根组件?
- hololens - MRTK - 在运行时更改空间意识材料
- filesystems - Databricks 文件系统 - %sh ls 与 %fs ls
- java - 如何防止JPA查询相关实体
- c - strncat 导致缓冲区溢出
- reactjs - 如何在firestore中同时完全删除集合文档和子集合文档
- flutter - #_currentArena 是什么?(句法)