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
。这样就直接加进去了。
在我的主题中,我定义了以下规则来在状态栏后面绘制我的视图:
<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
。这样就直接加进去了。