Java RecyclerView:禁用焦点更改导致的滚动
TL;DR我有一个Java RecyclerView:禁用焦点更改导致的滚动,java,android,android-recyclerview,android-edittext,focus,Java,Android,Android Recyclerview,Android Edittext,Focus,TL;DR我有一个RecyclerView的EditTexts。当用户关注EditText#1并点击EditText#2时,我希望EditText#2获得焦点,但我不希望ReyclerView滚动。我怎样才能做到这一点 我正在尝试使用一个RecyclerView,其中填充了一堆EditTexts。当我专注于一个EditText并单击另一个时,RecyclerView会滚动,以便第二个位于屏幕顶部。我想从RecyclerView中禁用此自动滚动,但我仍然希望用户能够滚动,并且我仍然希望第二个Ed
RecyclerView
的EditText
s。当用户关注EditText#1
并点击EditText#2
时,我希望EditText#2
获得焦点,但我不希望ReyclerView
滚动。我怎样才能做到这一点
我正在尝试使用一个
RecyclerView
,其中填充了一堆EditText
s。当我专注于一个EditText
并单击另一个时,RecyclerView
会滚动,以便第二个位于屏幕顶部。我想从RecyclerView
中禁用此自动滚动,但我仍然希望用户能够滚动,并且我仍然希望第二个EditText
能够集中,以便用户可以开始键入。我怎样才能做到这一点
我已经尝试了以下解决方案:
- ,但使用的是一个
。我在InterceptTouchEvent中调用了RecyclerView.OnItemTouchListener
recyclerView.requestFocusFromTouch
- 行为:一直滚动到点击的
的顶部EditText
- 行为:一直滚动到点击的
- 无论何时聚焦在任何
上,都可以通过EditText
editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, bool hasFocus) { if (hasFocus) { v.clearFocus(); } } });
- 行为:键盘从未出现,而
仍滚动到顶部RecyclerView
- 行为:键盘从未出现,而
在中完全禁用滚动是不可接受的,因为我仍然希望用户能够滚动。我最终从@pskink获得了此解决方案:
recylerView.setLayoutManager(new LinearLayoutManager(this) {
@Override
public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate) {
return false;
}
});
它似乎工作得很好,但是@pskink提到在使用箭头键时可能会出现问题。他在这里发布了另一个解决方案:。如果您对上述解决方案有问题,可以在链接处尝试其他解决方案。现在,我坚持我刚刚发布的那篇文章
更新
由于支持库v25.3.0,您还应该覆盖LayoutManager中的另一个方法:
@Override
public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate, boolean focusedChildVisible) {
return false;
}
RecyclerView将滚动至焦点项目。 尝试recyclerView.setFocusable(false)。
这对我很有用。试试这个:android:WindowsofInputMode=“adjustNothing | stateHidden”在Manifests中你能发布对你有用的吗?我也很想知道。@HBrooks还没有答案。请参见屏幕上的
requestchildrectangle
您可以在视图或布局管理器中覆盖它level@pskink你能举一个我将如何使用它的例子吗?