0

我正在使用一个 BottomSheetDialogFragment,其中包含: - 带有用户评论列表的 RecyclerView - 底部的 EditText,用户可以在其中编写新评论并发布

当用户点击 EditText 时,键盘会从底部显示出来。我想要的是键盘只推动 EditText,以便用户可以看到他正在输入的内容,但不能推动整个 BottomSheetDialogFragment。

例如,您可以在 Facebook 应用程序中看到理想的行为。

我尝试设置不同的值,setSoftInputMode但我所能实现的就是移动整个 BottomSheetDialogFragment,或者什么都不移动(让 EditText 被覆盖)。

4

1 回答 1

0

最简单的方法是不使用 BottomSheetDialogFragment,而是使用覆盖整个窗口或活动的常规片段。片段或活动;只要您占据整个屏幕,您喜欢哪个都没有关系。

当屏幕键盘出现时,活动窗口(默认情况下)会调整大小以便为屏幕键盘让路。

由于 BottomSheetDialogFragment 将其重力设置为bottom,因此当活动窗口调整大小时,它会将底部工作表及其所有内容向上推。

这是一个最简单的布局示例,可以实现您的目标

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="#80000000" />

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

首先是一个具有恒定高度的视图,它模仿了对话框之外的黑暗区域。无论窗口如何调整大小,这将始终是80dp

其次是 RecyclerView,它根据 LinearLayout 的剩余可用空间调整大小。注意属性android:layout_weight

第三个是 EditText,它的高度恒定为wrap_content. 再次无论窗口如何调整大小,这将始终是相同的高度。由于 RecyclerView 将尽可能多地占用空间,因此此 EditText 将保留在屏幕底部。

一旦由于屏幕键盘的出现而调整窗口大小,LinearLayout 将调整大小并重新计算其子级大小。由于 View 和 EditText 具有恒定的高度,因此必须使 RecyclerView 更小,使其看起来像 EditText 向上移动。

您不必使用 LinearLayout 来执行此操作,您可以使用任何其他布局来实现相同的效果。这里的重点是使用占据整个屏幕的布局。

于 2020-06-04T13:25:12.877 回答