我使用的是一个BottomSheetDialogFragment,它包含:-一个包含用户评论列表的RecyclerView --一个位于底部的EditText,用户可以在这里写一个新的评论并发布它。
当用户点击EditText时,键盘会从底部显示出来。我想要的是键盘只按EditText,这样用户就可以看到他正在输入什么,而不是按下整个BottomSheetDialogFragment。
例如,你可以在Facebook应用程序中看到令人向往的行为。
我尝试过为setSoftInputMode
设置不同的值,但我所能做的就是要么移动整个BottomSheetDialogFragment,要么什么也不动(保留EditText )。
发布于 2020-06-04 13:25:12
最简单的方法是不使用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将调整大小并重新计算它的子级大小。由于视图和EditText有一个恒定的高度,它将不得不使RecyclerView变小,使其看起来像是EditText向上移动。
您不必使用LinearLayout来完成此操作,您可以与任何其他布局实现相同的效果。这里的关键是使用一个占据整个屏幕的布局。
https://stackoverflow.com/questions/62195160
复制相似问题