如何禁止listview的item項獲得焦點,而讓item的子控件獲得焦點


本文為原創文章,歡迎轉載,但請注明出處 http://www.cnblogs.com/yexiubiao/archive/2013/02/24/2924324.html,未在文章頁面明顯位置給出原文連接的,將保留追究法律責任的權利。   
 
在機頂盒開發中會遇到這樣的需求,listview上的item項中有一張圖片(item里的ImageView子控件),當按下機頂盒遙控器的方向鍵時(例如方向鍵的下鍵),讓listview的某一個item項里面的圖片(如下圖左邊的ImageView)獲得焦點,而不是讓item自身獲得焦點(下圖右)。
          
 
    默認的情況下,是listview的item自身獲得了焦點(如上圖右),也就是說listview的item獲得焦點后,沒有傳遞給子控件或者子控件默認不能獲得焦點。
這時候我們可能會想到在布局文件里設置listview的descendantFocusability屬性(焦點傳遞性):android: descendantFocusability="afterDescendants"
然而無論設置其值為afterDescendants還是beforeDescendants或blocksDescendants都沒有達到想要的效果。
接下來我們可能會繼續尋找listview是否有以item為關鍵字的相關屬性,結果很遺憾,找遍了所有屬性都沒有item相關的關鍵字。
 
    其實與item相關的設置在配置文件里面雖然沒有,但是代碼里還是有的,如下:
listView.setItemsCanFocus(true); //設置item項的子控件能夠獲得焦點(默認為false,即默認item項的子空間是不能獲得焦點的)
通過這一行代碼即可實現以上需求,另外,關於焦點的傳遞大家有興趣的話可以自行查看源碼。
 
補充:如果沒有出現左圖的獲得焦點高亮效果,可能有以下原因:
1,ImageView默認不能獲得焦點,應該設置屬性為: android:focusable="true" (如果是ImageButton或Button等則不需要設置,他們默認是可以獲得焦點的)
2,沒有為該ImageView設置自定義drawable圖片的的selector(該ImageView其實已經獲得焦點了,只是沒有看出來而已)。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM