首页 > 解决方案 > 如何在系统栏下使用视图绘制布局?

问题描述

我必须进行布局,布局的顶部应该绘制在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(这是一个问题)。

在此处输入图像描述

标签: androidandroid-layoutkotlin

解决方案


在您的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)
    }

推荐阅读