RecyclerView 作为聊天界面,被键盘遮挡的解决办法

本文介绍了在重构项目中使用RecyclerView替换ListView作为IM聊天界面时遇到的键盘遮挡问题。作者尝试了三种方法:1) 设置RecyclerView的layoutManager.setStackFromEnd(),但会导致空白聊天界面时从底部加载;2) 在AndroidManifest.xml中设置android:windowSoftInputMode,但这适用于ListView而非RecyclerView;3) 添加addOnLayoutChangeListener监听键盘遮挡并滚动到指定位置。最终,第三种方法成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目在重构,使用 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);
                          }
                      }
                  });
              }
          }
      });
    
  • 该方法解决了问题。

    转载自https://www.cnblogs.com/liyiran/p/7490740.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值