当EditText聚焦时,Android EditText的容器(RecyclerView)自动滚动
问题描述:
我得到了一个RecyclerView,其元素包含一个EditText小部件。当EditText聚焦时,Android EditText的容器(RecyclerView)自动滚动
1.当前关注第二个EditText,第一个EditText部分显示在屏幕上。 the first EditText is partly showed
2.当点击第一个EditText时,它会得到焦点,然后RecyclerView会自动向下滚动以充分显示第一个EditText。 RecyclerView automatically scroll down when first EditText got focused
这是伟大的,但我想要的是RecyclerView不应该自动滚动。 任何解决方案? 谢谢!
答
我最终通过禁用RecyclerView从滚动来修复它,除非它接收到触摸事件。
首先,我定制一个LayoutManager:
@Override
public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
if(!horizontal) {
return 0;
}
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
if(!vertical) {
return 0;
}
时收到click事件: 我设置水平和垂直为false,这些原因RecyclerView不能滚动任何更多!
,我子类recyclerView和覆盖的onTouchEvent:
public boolean onTouchEvent(MotionEvent e) {
//we enable scrollHorizontallyBy and scrollVerticallyBy only in Touch Event, set layoutManager vertical and horizontal to true
......
return super.onTouchEvent(e);
}
所以MyRecyclerView不能滚动时点击发现焦点孩子是一个EditText。但是当接收触摸事件时它可以滚动!
将此代码添加到您的活动中声明您的清单 - > android:windowSoftInputMode =“stateVisible | adjustPan –
它不起作用,实际上我想要的是recyclerview根本不滚动,或者告诉我scrollX和scrollY何时它自动滚动,但它似乎不会通知任何已注册的RecyclerView.OnScrollListener当它在这种情况下滚动!这导致我大问题......我使用:com.android.support:recyclerview- V7:22+ –