zoukankan      html  css  js  c++  java
  • RecyclerView 作为聊天界面,被键盘遮挡的解决办法

    最近项目在重构,使用 RecyclerView 替换了 ListView 作为 IM 的聊天界面。然后遇到了一个问题就是当键盘弹出来的时候,键盘会遮挡住 RecyclerView 的一部分,造成聊天内容被遮挡,这样肯定是不好的了。然后 Google, bingStackoverflow 目前搜索到了 3 种方法,但是好像无效。

    方法 1

    • RecyclerViewlayoutManager 设置 setStackFromEnd()true
    • 该方法可以解决弹出的键盘遮挡 RecyclerView 的情况,但是会出现新的情况,就是当聊天界面为空白的时候,出现的聊天内容会从底部开始加载,如下图:

    • 该方法不可用

    方法 2

    • AndroidManifest.xmlActivity 添加 android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
    • 该方法适合 ListView ,不适合 RecyclerView

    方法 3

    • RecyclerView 添加 addOnLayoutChangeListener(OnLayoutChangeListener listener) ,根据 bottomoldbottom 值的变化,滑动到指定位置来实现。

    • OnLayoutChangeListener 接口,只有一个方法 onLayoutChange() ,在源码中的注释:Called when the layout bounds of a view changes due to layout processing. 意思是布局界限改变时调用

    • 代码:

        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 (commonChatAdapter.getItemCount() > 0) {
                                mRecyclerView.smoothScrollToPosition(commonChatAdapter.getItemCount() - 1);
                            }
                        }
                    });
                }
            }
        });
      
    • 该方法解决了问题。

  • 相关阅读:
    spring和mybatis的结合
    SpringMVC
    springdata
    springboot的总结
    SpringAop代理模式笔记
    springcloud
    完全二叉树和满二叉树
    C# 读取EXCEL文件的三种经典方法
    C#加密app.config中连接字符串的代码
    c#winform 程序 App.config文件加密(SDK命令)
  • 原文地址:https://www.cnblogs.com/liyiran/p/7490740.html
Copyright © 2011-2022 走看看