溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

AndroidTV 的焦點(diǎn)控制問題

發(fā)布時(shí)間:2020-06-18 08:44:59 來源:網(wǎng)絡(luò) 閱讀:4705 作者:DavidWillo 欄目:移動(dòng)開發(fā)

   最近在做有關(guān)安卓TV的相關(guān)項(xiàng)目,與手機(jī)端的安卓開發(fā)不同的是,TV端需要我們對焦點(diǎn)進(jìn)行一定的處理,才使得整個(gè)程序的邏輯符合我們的要求。在電視上進(jìn)行操作,一般只能通過遙控的上下左右以及確認(rèn)鍵來進(jìn)行焦點(diǎn)的轉(zhuǎn)移。而原生的安卓系統(tǒng)已經(jīng)為我們做了默認(rèn)的焦點(diǎn)獲取處理,而這個(gè)默認(rèn)的焦點(diǎn)則是自動(dòng)選擇該方向上距離最近的一個(gè)目標(biāo)獲得焦點(diǎn),注意,這里的距離未必是直線距離,更多時(shí)候是該方向坐標(biāo)的距離,比如:

AndroidTV 的焦點(diǎn)控制問題

   在這種情況下,在item1按下右鍵,item0將獲得焦點(diǎn),而在item0按下下鍵,item1將獲得焦點(diǎn),這往往會(huì)與我們的操作習(xí)慣不符。這時(shí)候就需要我們?nèi)タ刂平裹c(diǎn)。當(dāng)然了,最理想的情況是讓系統(tǒng)自動(dòng)幫我們處理焦點(diǎn)的獲取,我們的布局可以做出適當(dāng)?shù)恼{(diào)整來使得焦點(diǎn)的變化符合邏輯,而在迫不得已的情況下,我們也可以通過以下的思路來改變。

   1.在XML屬性布局文件中,通過設(shè)置nextFocusDown , nextFocusLeft ,nextFocusRight ,和nextFocusUp,這些屬性的值來明確焦點(diǎn)從當(dāng)前view轉(zhuǎn)移后的view的對應(yīng)id。

   2.通過設(shè)置focusable屬性,來屏蔽部分控件的焦點(diǎn)獲取。

   3.通過代碼中的requestFocus來在某一時(shí)刻使某控件強(qiáng)制獲得焦點(diǎn)。

   4.通過ViewTreeObserver.OnGlobalFocusChangeListener來監(jiān)聽全局的焦點(diǎn)變化,在焦點(diǎn)變化時(shí)進(jìn)行代碼操作。

   5.對特定布局的按鍵事件進(jìn)行攔截,然后手動(dòng)設(shè)置焦點(diǎn)變化。

   6.利用listview、gridview等adapterview的特性,當(dāng)整體獲得焦點(diǎn)時(shí),再對item進(jìn)行焦點(diǎn)分發(fā),比如在需要保存選中狀態(tài)的應(yīng)用場景。

   暫時(shí)我用到的主要是這些做法,日后可能會(huì)繼續(xù)進(jìn)行補(bǔ)充。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI