Jam*_* Ko 7 java android focus android-edittext android-recyclerview
TL; DR我有一个RecyclerView的EditText秒.当用户专注EditText #1并点击时EditText #2,我想EditText #2获得焦点,但我不想ReyclerView滚动.我怎样才能做到这一点?
我正在尝试RecyclerView使用一堆EditTexts.当我专注于一个EditText并且我点击另一个时,RecyclerView滚动使第二个位于屏幕的顶部.我想禁用此自动滚动RecyclerView,但我仍然希望用户能够滚动,我仍然希望第二个EditText关注,以便用户可以开始输入.我怎样才能做到这一点?
我已经尝试过以下解决方案:
/sf/answers/567113011/,但有一个RecyclerView.OnItemTouchListener.我叫recyclerView.requestFocusFromTouch在onInterceptTouchEvent.
EditText.EditText通过随时随地清除焦点
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, bool hasFocus) {
if (hasFocus) {
v.clearFocus();
}
}
});
Run Code Online (Sandbox Code Playgroud)
RecyclerView仍然滚动到顶部.完全禁用此问题中的滚动是不可接受的,因为我仍然希望用户能够滚动.
Jam*_* Ko 18
我最终得到了@pskink的解决方案:
recylerView.setLayoutManager(new LinearLayoutManager(this) {
@Override
public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate) {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
它似乎工作得很好,但@pskink已经提到使用箭头键时可能会出现问题.他在这里发布了另一个解决方案:https://pastebin.com/8JLSMkF7.如果您在使用上述解决方案时遇到问题,可以尝试在链接中使用替代解决方案.现在,我坚持我刚发布的那个.
UPDATE
从support-library v25.3.0开始,您还应该覆盖LayoutManager中的另一个requestChildRectangleOnScreen方法:
@Override
public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate, boolean focusedChildVisible) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4360 次 |
| 最近记录: |