天天看點

RecyclerView搶焦點自動滾動

最近有個項目,其中有一個新聞詳情頁面,在新聞詳情下面是一個使用者評論清單,最底部有一個評論輸入框,有點類似于今日頭條的新聞詳情頁面。評論清單是采用RecyclerView開發的,點選底部評論輸入框會彈出軟鍵盤。發現有個比較詭異的現象,當軟鍵盤縮回去的時候,評論清單RecyclerView老是會自動滾動到頂部。這樣體驗會比較差,有可能我本來在看某條評論資訊,點選評論輸入後又放棄,這個時候我肯定是希望頁面停留在原來那個地方的。

如下2張圖所示,RecyclerView的header是一個WebView,用來加載新聞網頁資訊,其他清單項則是顯示評論,點選底部評論彈出一個輸入框以及軟鍵盤,當軟鍵盤取消的時候,RecyclerView自動滾動到了header頂部:

RecyclerView搶焦點自動滾動
原本清單位置
RecyclerView搶焦點自動滾動

彈出輸入法後

通過檢視源碼以及參考網上别人的分析,原來這就是所謂的RecyclerView搶奪焦點現象。當輸入框及軟鍵盤顯示出來的時候,整個界面的焦點是在這個輸入框EditText上的,但是當取消軟鍵盤的時候,界面焦點發生了變化,RecyclerView搶奪了焦點,進而導緻界面自動滾動了。

通過試驗,采用以下方法解決了我的問題:

在RecyclerView的父布局上增加“ android:focusable="true" android:focusableInTouchMode="true"”這2個配置。

<RelativeLayout  
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true"
    >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </android.support.v7.widget.RecyclerView>
</RelativeLayout>
           

繼續閱讀