android:fitsSystemWindows 不工作

android:fitsSystemWindows not working

在我的主题中,我定义了以下规则来在状态栏后面绘制我的视图:

<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>

并在 Activity (onCreate) 中:

getWindow.getDecorView.setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)

然后,在我的 View 中,我使用了一个 Barcodescanner,它应该在状态栏后面绘制,它正在工作。但是,当我将 android:fitsSystemWindows 应用于任何子视图时,它们的位置都不会调整。不过,当我将它应用于根元素时它起作用了。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">

    <my.Scanner
        android:id="@+id/scanner"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:fitsSystemWindows="true"> <!-- Should receive a top padding, right? -->

        <View android:layout_width="50dp"
              android:layout_height="50dp"
              android:background="@color/red" />

    </FrameLayout>

</FrameLayout>

我的问题很可能与 multiple/nested fitsSystemWindows 属性有关,我后来发现这些属性不起作用。我通过将属性应用于一个视图解决了我的问题,然后通过 ViewTreeObserver.OnGlobalLayoutListener 将填充复制到需要它们的其他视图。这是一个丑陋的 hack,但现在可以完成它的工作。

使用 CoordinatorLayout 作为你视图的根目录,它对我有用。

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

我在 Android 4.4

中遇到同样的问题

我的问题是<item name="android:windowTranslucentStatus">true</item>

<item name="android:fitsSystemWindows">true</item>

冲突

我的方法是移除 <item name="android:windowTranslucentStatus">true</item>

对我来说,问题是键盘隐藏了一个位于 activity 末尾的 editText 字段。我已经尝试了所有解决方案,但没有任何效果。 我在调用 setContentView() 方法之前使用此代码使状态栏透明:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window w = getWindow(); // in Activity's onCreate() for instance
            w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }

我删除了它,还删除了 android:windowSoftInputMode="adjustResize|adjustPan" from the maneifest 文件,现在可以使用了。

进行此更改

1. Manifest - create a theme and add window background of your like
2. toolbar in xml -  add the same background in toolbar

这对我有用。

有一种简单的方法可以做到这一点。确保您在应用到 activity.

的主题样式中设置了 2 个元素
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    ....
    <item name="colorPrimaryDark">@android:color/transparent</item>
    <item name="android:fitsSystemWindows">true</item>
    ...
</style>

无需在布局中添加 android:fitsSystemWindows。这样就直接加进去了。