web-dev-qa-db-ja.com

キーボードが表示されたときにrecyclerViewを押し上げる方法は?

Whatsappのようにメッセージレイアウトを作成したいと思います。 edittextとrecyclerViewがあります。

問題は、キーボードが表示されたときにメッセージが非表示になることです。

それで、これをRecyclerViewとしましょう:

_---item 1---  
---item 2---  
---item 3---  
---item 4---  
---EditText---
_

キーボードが表示されると、次のようになります。

_---item 1---  
---item 2---  
---EditText---
---Keyboard---  
_

しかし、私はこれを取得したい:

_---item 3---  
---item 4---  
---EditText---
---Keyboard---
_

注:linearLayoutManager.setStackFromEnd(true);を設定すると機能しますが、メッセージが1つある場合は、ページの下部に表示されます。

19
david

recyclerviewとeditTextを使用してアクティビティのadjustresizeを設定します。

Android:windowSoftInputMode="adjustResize"

onLayoutChangeListenerをRecyclerViewに追加し、onLayoutChangeでscrollToPositionをdata.size()-1に設定します。

  mRecyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
 @Override

public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop,int oldRight, int oldBottom)
{

mRecyclerView.scrollToPosition(mMessages.size()-1);

}
    });
21
devdoot Ghosh

私がやった方法は、アイテムホルダーのサイズに応じてsetStackFromEnd()を設定し、androidManifestでadjustResizeを設定することです。

これが私がチェックする方法です:

if (recycleView.getChildCount() == items.size()){
    mLayoutManager.setStackFromEnd(true);
}
else{
    mLayoutManager.setStackFromEnd(false);
}
2
VHanded

私は英語が得意ではありません。 ChatRecyclerViewを使用して、linearlayoutmanagerのstackfromendをfalseに設定します。

public class ChatRecyclerView extends RecyclerView {
    private int oldHeight;

    public ChatRecyclerView(Context context) {
        super(context);
    }

    public ChatRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ChatRecyclerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        int delta = b - t - this.oldHeight;
        this.oldHeight = b - t;
        if (delta < 0) {
            this.scrollBy(0, -delta);
        }
    }
}
1
minjung Ahn

私は 編集テキストをクリックするとコンテンツをプッシュする から解決策を得ました

以下のコードを入力するだけです

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
0
hikky36