由于要做日歷開發(fā)漸進教程(5),而(5)中要完成一個功能:
點擊任意一天時,高亮顯示目標日期。
這個功能顯然需要用到focus實現(xiàn),然后就去查。有focusable和focusableInTouchMode,現(xiàn)在搞明白了一些,寫下自己的理解,希望你能幫助大家吧。
通過搜索,在stackoverFlow上找到了兩個答案,基本解決了我的疑惑。
http://stackoverflow.com/questions/24155956/difference-between-focusable-and-focusableintouchmode
關(guān)于焦點是什么的問題?
類似非觸屏手機時代,需要使用鍵盤的上下左右去選中某個應用,然后點擊確定執(zhí)行。而觸屏手機,我們只需要對應用點擊一次,即可,無需焦點。也就是會所焦點是為了標記你目前選中的位置的。而這個在日歷中卻是有用的。
android:focusable與android:focusableInTouchMode
前者針對在鍵盤下操作的情況,如果設置為true,則鍵盤上下左右選中,焦點會隨之移動。
而后者,顯然是針對觸屏情況下的,也就是我們點擊屏幕的上的某個控件時,不要立即執(zhí)行相應的點擊邏輯,而是先顯示焦點(即控件被選中),再點擊才執(zhí)行邏輯。
android:focusable=“true”不會改變android:focusableInTouchMode,因此只在鍵盤狀態(tài)下顯示焦點,在TouchMode狀態(tài)下,依舊無法顯示焦點。
android:focusable=“false”,一定會使android:focusableInTouchMode=“false”。
相對的
android:focusableInTouchMode=“false”,不會影響android:focusable。
android:focusableInTouchMode=”true”,一定會是android:focusable=“true”
說來說去有點繞。
但請記住一點,就是對于現(xiàn)在觸屏時代的手機而言,如果要獲取焦點,我們只需要設置
android:foucusableInTouchMode=“true”就可以了。
所有的獲取焦點,都要有一個前提,那就是該控件必須設置android:clickable=”true”,如果都點擊不了,設置焦點應該沒什么意義了吧。
在后續(xù)的日歷開發(fā)中有對focusableInTouchMode的應用,大家可以看到。