我正在尝试在RecyclerView中创建具有可变数量的EditText元素的长格式。该布局由一个FrameLayout,一个用于表单部分的RecyclerView,然后在CardView内部的嵌套RecyclerView组成,以容纳该部分的所有表单元素(请参见下面的动画)。
通常,当一个元素被聚焦时,键盘会出现,窗口会被调整大小,并且视图会滚动,因此元素会出现在键盘上方。我遇到的问题是当在屏幕底部和节的顶部选择一个元素时,将调整窗口的大小,并且RecyclerView会分离节的视图,从而导致在试图聚焦时EditText不存在。这表现为键盘突然弹出打开,然后在焦点返回到FrameLayout时关闭。
我在活动中使用android:windowSoftInputMode="adjustResize"
,并且不希望使用adjustPan
,因为它不能提供最佳的用户体验。
我曾尝试在EditText中添加一个单击侦听器,然后向上滚动RecyclerView,以使在调整窗口大小时视图不会被破坏,但是这感觉很棘手,很难准确地检测出应该将RecyclerView滚动多远。您还会得到一些怪异的跳跃。为此,您必须关闭EditText的可聚焦性,这也不理想,因为它会破坏导航和可访问性。
[尝试执行类似recyclerView.getRecycledViewPool().setMaxRecycledViews(0, SECTION_COUNT);
的操作也不起作用,因为它不会阻止视图分离。
调整窗口大小以适应键盘时,如何防止视图分离,以便EditText获得焦点?
我用by解决这个问题
android.os.Handler().postDelayed({recycle.smoothScrollToPosition(0)},100)