最近有個(gè)項(xiàng)目,其中有一個(gè)新聞詳情頁(yè)面,在新聞詳情下面是一個(gè)用戶評(píng)論列表曼库,最底部有一個(gè)評(píng)論輸入框,有點(diǎn)類似于今日頭條的新聞詳情頁(yè)面略板。評(píng)論列表是采用RecyclerView開(kāi)發(fā)的毁枯,點(diǎn)擊底部評(píng)論輸入框會(huì)彈出軟鍵盤(pán)。發(fā)現(xiàn)有個(gè)比較詭異的現(xiàn)象叮称,當(dāng)軟鍵盤(pán)縮回去的時(shí)候种玛,評(píng)論列表RecyclerView老是會(huì)自動(dòng)滾動(dòng)到頂部藐鹤。這樣體驗(yàn)會(huì)比較差,有可能我本來(lái)在看某條評(píng)論信息赂韵,點(diǎn)擊評(píng)論輸入后又放棄娱节,這個(gè)時(shí)候我肯定是希望頁(yè)面停留在原來(lái)那個(gè)地方的。
如下2張圖所示祭示,RecyclerView的header是一個(gè)WebView肄满,用來(lái)加載新聞網(wǎng)頁(yè)信息,其他列表項(xiàng)則是顯示評(píng)論质涛,點(diǎn)擊底部評(píng)論彈出一個(gè)輸入框以及軟鍵盤(pán)稠歉,當(dāng)軟鍵盤(pán)取消的時(shí)候,RecyclerView自動(dòng)滾動(dòng)到了header頂部:
通過(guò)查看源碼以及參考網(wǎng)上別人的分析汇陆,原來(lái)這就是所謂的RecyclerView搶奪焦點(diǎn)現(xiàn)象怒炸。當(dāng)輸入框及軟鍵盤(pán)顯示出來(lái)的時(shí)候,整個(gè)界面的焦點(diǎn)是在這個(gè)輸入框EditText上的毡代,但是當(dāng)取消軟鍵盤(pán)的時(shí)候阅羹,界面焦點(diǎn)發(fā)生了變化,RecyclerView搶奪了焦點(diǎn)月趟,進(jìn)而導(dǎo)致界面自動(dòng)滾動(dòng)了灯蝴。
通過(guò)試驗(yàn),采用以下方法解決了我的問(wèn)題:
在RecyclerView的父布局上增加“ android:focusable="true" android:focusableInTouchMode="true"”這2個(gè)配置孝宗。
<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>