在某些设备中应用“ fitsSystemWindows”后,已创建空间。如何删除?

时间:2019-06-27 05:38:55

标签: android android-layout

在应用中,我有status bar并隐藏了the bottom control bar

上次,我使用marginTop="20dp"来适应状态栏的下一行。但是,我使用Galaxy 10进行了测试,状态栏有很大的不同。因此,我的应用看起来很奇怪,并解决了在根视图上应用此属性的问题。

fitsSystemWindows = "true"

但是,现在,我还有另一个问题,bottom control bar被隐藏,但是应用该属性后,其空白与底部控制栏一样大。有什么办法适合显示状态栏但没有底部控制栏的屏幕(虽然我将其隐藏)?

enter image description here

(黄色是MainActivity,黑色是Fragment)

粉红色的部分必须到达底部,但由于该属性而无法到达。

我进行了测试,我认为kitkatQ会发生这种情况。

当我删除该属性时,它可以与底部控制栏一起使用,但不能与状态栏一起使用...

这是我的布局文件。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.main.MainActivity">

    <fragment
        ...
    />
    ...
</FrameLayout>

因此,我仅使用一个Activity较多的Fragments

这是Activity的用途:

    private fun hideStatusBar() {
        DisplayUtil.hideStatusBar(this)
        this?.window?.decorView?.setOnSystemUiVisibilityChangeListener { visibility ->
            if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
                DisplayUtil.hideStatusBar(this)
            }
        }
    }

    object DisplayUtil {
        fun hideStatusBar(activity: Activity?) {
            activity?.window?.decorView?.systemUiVisibility = (
                    View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY // hide status bar and nav bar after a short delay, or if the user interacts with the middle of the screen
                    )
        }
    }

0 个答案:

没有答案