【发布时间】:2017-06-02 23:04:54
【问题描述】:
我正在尝试在 RecyclerView 中创建具有可变数量的 EditText 元素的长表单。布局由 FrameLayout、表单部分的 RecyclerView 和 CardView 内的嵌套 RecyclerView 组成,用于保存该部分的所有表单元素(参见下面的动画)。
通常当元素获得焦点时,键盘会出现,窗口会调整大小,并且视图会滚动以使元素出现在键盘上方。我遇到的问题是当在屏幕底部和部分顶部选择一个元素时,窗口会调整大小并且 RecyclerView 分离部分的视图,导致 EditText 在尝试聚焦时不存在。 这表现为键盘突然打开,然后在焦点返回到 FrameLayout 时关闭。
我在我的活动中使用android:windowSoftInputMode="adjustResize",不想使用adjustPan,因为它不能提供最佳的用户体验。
我尝试向 EditText 添加一个点击侦听器,然后向上滚动 RecyclerView 以便在窗口调整大小时视图不会被破坏,但这感觉很糟糕,而且很难准确检测 RecyclerView 应该向上多远滚动。你也会得到一些奇怪的跳跃。为此,您必须关闭 EditText 的可聚焦性,这也不理想,因为它破坏了导航和可访问性。
尝试执行recyclerView.getRecycledViewPool().setMaxRecycledViews(0, SECTION_COUNT); 之类的操作也不起作用,因为它不会阻止视图被分离。
当针对键盘调整窗口大小以使 EditText 获得焦点时,如何防止视图分离?
【问题讨论】:
-
单击编辑文本时使用 InputMethodManager 并打开诸如 showSoftInput 之类的键盘方法。使用 edittext requestFocus。
-
我也遇到了同样的问题,你解决了吗?
-
我只有很少的字段,我可以只使用静态布局文件(没有 RecyclerView)并绑定每个 EditText 字段。它没有我想要的灵活性,但可以工作。对不起!
-
我也面临同样的问题。谁能告诉如何解决它..?
标签: android android-edittext android-recyclerview