我在尝试正确使用 WindowInsets 时遇到了问题。
这是我的初始布局:
<ScrollView
android:id="@+id/scrollView">
<LinearLayout>
<FrameLayout
android:id="@+id/stretchableView" />
<FrameLayout
android:id="@+id/fixedBottomView"
android:layout_height="500dp">
<EditText />
</FrameLayout>
</LinearLayout>
</ScrollView>
fixedBottomView
具有固定大小,同时stretchableView
填充剩余空间。
这是它的样子,以及当键盘出现时会发生什么(到目前为止一切都很好):
在另一种情况下,我试图实现类似的行为,但使用 WindowInsets。
这就是我处理 WindowInsets 的方式:
findViewById<View>(R.id.scrollView).apply {
rootView.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(
top = insets.systemWindowInsetTop,
bottom = insets.systemWindowInsetBottom
)
insets
}
}
你看,我在ScrollView
. 在这种情况下会发生以下情况:
静态布局看起来不错,但是键盘EditView
出现时会重叠,这是我的问题。
WindowInsets 似乎处理得当,因为您可以向下滚动查看EditText
:
这是我活动的完整 XML:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/stretchableView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@drawable/layout_back" />
<FrameLayout
android:id="@+id/fixedBottomView"
android:layout_width="match_parent"
android:layout_height="500dp"
android:background="@drawable/layout_back">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="8dp"
android:ems="10"
android:hint="Edit Text" />
</FrameLayout>
</LinearLayout>
</ScrollView>