2017-08-02 10 views
1

私はRecyclerViewをチャットしています。項目はTextViewsレイアウトは逆です。入力フィールドはRecyclerView以下です。 RecyclerViewの下にスクロールして下の項目をクリックすると、フォーカスが当てられます(クリックするたびにフォーカスが当たった場合のみ)、RecyclerViewが自動的にその項目の上にスクロールします(項目のテキストが画面の高さより大きい場合) 。ビューがフォーカスされているときにRecyclerViewが表示の上にスクロールする

また、キーボードが表示されているときに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()を呼び出します場合 - その[OK]を、それがありませんスクロールしませんが、RecyclerViewアイテムをクリックすると、そのアイテムの先頭にスクロールされ、スクロールされます。

答えて

0

解決策が見つかりました。私はLinearLayoutMaを拡張しましたいくつかのメソッドをオーバーライドします。今は集中したアイテムにスクロールしません。誰かがもっと良い解決策を知っているのだろうか?

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; 
} 
} 
0

この答えは、同様にあなたの解決策になるかもしれません:RecyclerView scrolls to top after keyboard hides

<activity 
    android:windowSoftInputMode="adjustPan" 

Android Developer Site link

活動のメインウィンドウは常にのための部屋を作るためにリサイズされた "adjustResize"

ソフト キーボードが画面に表示されます。

「adjustPan」

活動のメインウィンドウは、ソフト キーボードのための余地を作るためにリサイズされていません。むしろ、ウィンドウの内容は自動的に のようにパンされ、現在のフォーカスがキーボードによって隠されることはなく、ユーザは入力中のものを常に見ることができます。 ユーザがソフトキーボードを閉じて に移動して、ウィンドウの不明瞭な部分と対話する必要がある場合があるため、これは一般的には、 のサイズ変更よりも望ましくありません。

関連する問題