AndroidTV 的焦點控制問題

   最近在做有關安卓TV的相關項目,與手機端的安卓開發不同的是,TV端需要我們對焦點進行一定的處理,才使得整個程序的邏輯符合我們的要求。在電視上進行操作,一般只能通過遙控的上下左右以及確認鍵來進行焦點的轉移。而原生的安卓系統已經爲我們做了默認的焦點獲取處理,而這個默認的焦點則是自動選擇該方向上距離最近的一個目標獲得焦點,注意,這裏的距離未必是直線距離,更多時候是該方向座標的距離,比如:

wKiom1iyvtGAvUzGAAAT5RSUakw805.png-wh_50

   在這種情況下,在item1按下右鍵,item0將獲得焦點,而在item0按下下鍵,item1將獲得焦點,這往往會與我們的操作習慣不符。這時候就需要我們去控制焦點。當然了,最理想的情況是讓系統自動幫我們處理焦點的獲取,我們的佈局可以做出適當的調整來使得焦點的變化符合邏輯,而在迫不得已的情況下,我們也可以通過以下的思路來改變。

   1.在XML屬性佈局文件中,通過設置nextFocusDown , nextFocusLeft ,nextFocusRight ,和nextFocusUp,這些屬性的值來明確焦點從當前view轉移後的view的對應id。

   2.通過設置focusable屬性,來屏蔽部分控件的焦點獲取。

   3.通過代碼中的requestFocus來在某一時刻使某控件強制獲得焦點。

   4.通過ViewTreeObserver.OnGlobalFocusChangeListener來監聽全局的焦點變化,在焦點變化時進行代碼操作。

   5.對特定佈局的按鍵事件進行攔截,然後手動設置焦點變化。

   6.利用listview、gridview等adapterview的特性,當整體獲得焦點時,再對item進行焦點分發,比如在需要保存選中狀態的應用場景。

   暫時我用到的主要是這些做法,日後可能會繼續進行補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章