键盘遮挡RecyclerView

问题描述:
我使用 RecyclerView 来做消息列表,但是在软键盘弹起时会遮挡住 RecyclerView,而不是将 RecyclerView 与输入框一起顶上去。
清单文件里的 android:windowSoftInputMode 我设置为 adjustResize没效果。试过设置为 adjustPan,但是会将 标题栏也顶出布局外面。

问:该怎样才能做到像微信那样弹出软键盘会将 RecyclerView 顶上去?
图片描述

阅读 12.5k
5 个回答

标题栏被顶起来应该是你布局文件没写对,我需要知道你xml怎么写的,另外,还有可能其实不是被遮挡,而且RecyclerView没有滑动到最底部而已

对于RecyclerView来说,你需要两个配置,一是,android:windowSoftInputMode="adjustResize",再就是代码初始化RecyclerView的时候加上这个

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//这是重点
layoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(layoutManager);

代码不全,请补全

新手上路,请多包涵

AndroidManifest设置Activity的软键盘状态 android:windowSoftInputMode="stateHidden|adjustResize"

//设置布局管理器
LinearLayoutManager mManager = new LinearLayoutManager(mContext);
mManager.setStackFromEnd(true); //关键
recyclerView.setLayoutManager(mManager);

ayoutManager.setReverseLayout(true); 这句会导致只有1条数据时,显示在最底部, 并不符合常见场景。
可以尝试一下以下代码:

mRecyclerView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        if (bottom < oldBottom) {
            mRecyclerView.post(new Runnable() {
                @Override
                public void run() {
                    if (mChatAdapter.getItemCount() > 0) {
                        mRecyclerView.smoothScrollToPosition(mChatAdapter.getItemCount() - 1);
                    }
                }
            });
        }
    }
});

但是感觉依旧不够优雅,不能和软键盘同步上升。
求更好的解决方案。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏