我有RecyclerView
,某种聊天。项目为TextViews
布局相反。 RecyclerView
下面的输入字段。当我滚动到RecyclerView
的底部并点击底部项目时它会聚焦(只有当它聚焦时,而不是每次点击时),RecyclerView
自动滚动到该项目的顶部(当文本时) in item大于屏幕高度。)
当键盘可见并且我点击RecyclerView
项目 - 键盘隐藏和回收者视图滚动到该项目的顶部时,如何禁用此类行为?
我希望它在键盘打开时或在我点击某个项目时保持在同一位置。
键盘隐藏了此方法
* * * *
inputView.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus){
hideKeyboard();
}
});
* * * *
public void hideKeyboard() {
InputMethodManager keyboard = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(inputView.getWindowToken(), 0);
}
RecyclerView
以这种方式配置:
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.messageList);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setReverseLayout(true);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(chatAdapter = new chatAdapter(getContext()));
如果我按下按钮并通过单击该按钮调用hideKeyBoard()
- 它可以,它不会滚动,但是当我点击RecyclerView项目时 - 它会聚焦并滚动到该项目的顶部
答案 0 :(得分:1)
我找到了一个解决方案,我扩展了LinearLayoutManager并覆盖了一些方法。现在它不会滚动到焦点项目。也许有人知道更好的解决方案?
public class NotScrollingToFocuesChildrenLinearLayoutManager extends LinearLayoutManager {
public NotScrollingToFocuesChildrenLinearLayoutManager(Context context) {
super(context);
}
public NotScrollingToFocuesChildrenLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public NotScrollingToFocuesChildrenLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean onRequestChildFocus(RecyclerView parent, RecyclerView.State state, View child, View focused) {
//return super.onRequestChildFocus(parent, state, child, focused);
return true;
}
@Override
public boolean onRequestChildFocus(RecyclerView parent, View child, View focused) {
//return super.onRequestChildFocus(parent, child, focused);
return true;
}
}
答案 1 :(得分:0)
这个答案可能也是您的解决方案:RecyclerView scrolls to top after keyboard hides
<activity
android:windowSoftInputMode="adjustPan"
“adjustResize”
活动的主窗口始终调整大小以便为软件腾出空间 键盘在屏幕上。
“adjustPan”
活动的主窗口未调整大小以便为软件腾出空间 键盘。相反,窗口的内容会自动平移 这样当前的焦点永远不会被键盘和用户遮挡 总能看到他们正在打字的东西。这通常不太理想 比调整大小,因为用户可能需要关闭软键盘 进入并与窗户的模糊部分互动。