Android RecyclerView中item焦點亂跳問題(適用於PDA以及TV等帶方向鍵的安卓裝置)
阿新 • • 發佈:2019-01-11
專案中有許多列表,經常展示,分頁等等,又加上裝置本身就有方向鍵,需求就是儘量使用方向鍵操作程式,所以焦點的控制尤為重要,本篇文章講解了,在列表分頁後焦點消失的問題。
如何讓View能夠獲取焦點?
首先系統提供的View中,像CheckBox,RadioButton,Button等是可以獲取到焦點的,有方向鍵的可以試一下:
上圖就是我用方向鍵移動焦點產生的效果,可以看到焦點在這些控制元件上的時候,周邊背景會變成灰色,焦點在SeekBar上還可以使用方向鍵左右進行拖動。這些控制元件都是可以獲取焦點的那麼,像TextView以及ViewGroup怎麼獲取焦點,很簡單,在XML檔案中:
android:focusable="true"
設定可以獲取焦點,我們來看一下效果。我們定義了一個TextView:
怎麼感覺加完focusable=true還是獲取不到焦點,其實獲取到了,我們來為TextView寫一個選擇器驗證一下結論:
這次終於可以非常直觀的看到我們的TextView終於獲取到焦點了。下面來說RecycleView中的item的焦點問題,首先這個問題就是,分頁時焦點消失,按方向鍵UP再出現焦點,而且焦點出現的位置也不正確:
那麼如何去解決這種問題,我的思路是這樣,首先在資料來源中新增是否被選中欄位,在分頁得到後重新整理介面卡之前,根據計算的得出當前應該獲取焦點的item位置,設定資料來源後,再重新整理介面卡,當然在介面卡中呼叫requestFocus讓指定的item獲取焦點,這樣就可以釋放螢幕了:
這樣既可實現焦點的控制,就算一直按住down鍵也不會出現問題。程式碼比較簡單可以自行下載。