2016-04-21 155 views
2

我得到了一個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不應該自動滾動。 任何解決方案? 謝謝!

+0

將此代碼添加到您的活動中聲明您的清單 - > android:windowSoftInputMode =「stateVisible | adjustPan –

+0

它不起作用,實際上我想要的是recyclerview根本不滾動,或者告訴我scrollX和scrollY何時它自動滾動,但它似乎不會通知任何已註冊的RecyclerView.OnScrollListener當它在這種情況下滾動!這導致我大問題......我使用:com.android.support:recyclerview- V7:22+ –

回答

1

我最終通過禁用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。但是當接收觸摸事件時它可以滾動!