键盘遮挡RecyclerView

发布于 2022-09-04 09:03:49 字数 359 浏览 29 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

对岸观火 2022-09-11 09:03:49

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

疑心病 2022-09-11 09:03:49

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

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//这是重点
layoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(layoutManager);
ぶ宁プ宁ぶ 2022-09-11 09:03:49

代码不全,请补全

深居我梦 2022-09-11 09:03:49

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

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

删除会话 2022-09-11 09:03:49

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文