1

我在尝试正确使用 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填充剩余空间。

这是它的样子,以及当键盘出现时会发生什么(到目前为止一切都很好):

1

在另一种情况下,我试图实现类似的行为,但使用 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. 在这种情况下会发生以下情况:

2

静态布局看起来不错,但是键盘EditView出现时会重叠,这是我的问题。

WindowInsets 似乎处理得当,因为您可以向下滚动查看EditText

3


这是我活动的完整 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>
4

0 回答 0