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);
                          }
                      }
                  });
              }
          }
      });
    
  • 該方法解決了問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM