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);
                            }
                        }
                    });
                }
            }
        });
      
    • 该方法解决了问题。

  • 相关阅读:
    Oracle分析函数row_number()等的使用实例
    Oracle行列转换case when then方法案例
    Oracle日期函数
    Oracle转换函数
    Oracle数值函数
    Oracle字符函数length substr concat实例
    Oracle列转行函数LISTAGG()
    Oracle 条件判断函数decode和case when then案例
    Oracle NVL空值处理函数
    【学亮开讲】Oracle内外连接查询20181119
  • 原文地址:https://www.cnblogs.com/liyiran/p/7490740.html
Copyright © 2011-2022 走看看