android tv列表焦點(diǎn)記憶實(shí)現(xiàn)的方法
在Android tv中的開發(fā)中,經(jīng)常要跟焦點(diǎn)打交道,一個(gè)常見的需求是要有焦點(diǎn)記憶功能,焦點(diǎn)移動(dòng)到列表中的某一項(xiàng)中,焦點(diǎn)移出去,在回來時(shí)焦點(diǎn)還要定位到原來的項(xiàng)目上,對(duì)于這種需求,常見的實(shí)現(xiàn)方式是列表用用listview或者recyclerview實(shí)現(xiàn),維護(hù)一個(gè)變量去存儲(chǔ)上次的焦點(diǎn)位置,并在焦點(diǎn)變動(dòng)或者按鍵事件中去維護(hù)這個(gè)變量和使用這個(gè)變量來定位.
具體實(shí)現(xiàn)
比如說用recyclerview實(shí)現(xiàn)列表時(shí),在每個(gè)itemview的按鍵事件中,根據(jù)按鍵的方向和當(dāng)前view的位置,判斷是否是向外移走焦點(diǎn)的,如果是,那么就去設(shè)置父view也就是recyclerview的焦點(diǎn)模式,并且要保存當(dāng)前view的位置信息
在用戶操作移回焦點(diǎn)時(shí),由于前一步設(shè)置了焦點(diǎn)模式為block,因此會(huì)父view會(huì)首先獲取焦點(diǎn),增加焦點(diǎn)變動(dòng)的事件處理:
recyclerview.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){ Recyclerview recyclerview = (Recyclerview)v; recyclerView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); if(mCurrentFocusPosition>0){ LayoutManager layoutManager = recyclerView.getLayoutManager(); View viewByPosition = layoutManager.findViewByPosition(mCurrentFocusPosition); if(viewByPosition!=null){ viewByPosition.requestFocus(); } } } } });
如代碼所示,在焦點(diǎn)變動(dòng)處理中,設(shè)置view的焦點(diǎn)模式,可以讓子view獲取焦點(diǎn);拿到上一步保存的位置信息來手動(dòng)設(shè)置焦點(diǎn).
后面介紹另一種更簡(jiǎn)便的方法,有更好的封裝性,不需要外層邏輯做維護(hù)處理.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)記住用戶名和密碼功能
登陸界面創(chuàng)建一個(gè)復(fù)選按鈕,通過按鈕選取來進(jìn)行事件處理。若按鈕選中記住賬號(hào)和密碼的信息,本文教大家如何使用Android實(shí)現(xiàn)記住用戶名和密碼功能,感興趣的小伙伴們可以參考一下2016-05-05Android編程之ListPreference用法實(shí)例分析
這篇文章主要介紹了Android編程之ListPreference用法,結(jié)合實(shí)例形式較為詳細(xì)的分析說明了ListPreference的功能、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2015-12-12ViewPager實(shí)現(xiàn)帶引導(dǎo)小圓點(diǎn)與自動(dòng)跳轉(zhuǎn)的引導(dǎo)界面
這篇文章主要為大家詳細(xì)介紹了ViewPager實(shí)現(xiàn)帶引導(dǎo)小圓點(diǎn)與自動(dòng)跳轉(zhuǎn)的引導(dǎo)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android10 App啟動(dòng)Activity源碼分析
這篇文章主要為大家介紹了Android10 App啟動(dòng)Activity源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Android播放多張圖片形成的一個(gè)動(dòng)畫示例
這篇文章主要介紹了Android播放多張圖片形成的一個(gè)動(dòng)畫實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android逐幀播放動(dòng)畫圖片及ImageView控件的相關(guān)使用技巧,需要的朋友可以參考下2016-10-10Android使用分類型RecyclerView仿各大商城首頁
這篇文章主要為大家詳細(xì)介紹了Android使用分類型的RecyclerView仿各大商城首頁,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android 出現(xiàn):java.lang.NoClassDefFoundError...錯(cuò)誤解決辦法
這篇文章主要介紹了Android 出現(xiàn):Android出現(xiàn):java.lang.NoClassDefFoundError: android/os/PersistableBundle錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-03-03Android ListView彈性效果的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Android ListView彈性效果的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05Android7.0指紋服務(wù)FingerprintService實(shí)例介紹
這篇文章主要介紹了Android7.0指紋服務(wù)FingerprintService介紹,需要的朋友可以參考下2018-01-01