android:focusable和android:focusableInTouchMode的區(qū)別

由于要做日歷開發(fā)漸進教程(5),而(5)中要完成一個功能:

點擊任意一天時,高亮顯示目標日期

這個功能顯然需要用到focus實現(xiàn),然后就去查。有focusable和focusableInTouchMode,現(xiàn)在搞明白了一些,寫下自己的理解,希望你能幫助大家吧。

通過搜索,在stackoverFlow上找到了兩個答案,基本解決了我的疑惑。

http://stackoverflow.com/questions/24155956/difference-between-focusable-and-focusableintouchmode

http://stackoverflow.com/questions/23799064/what-is-the-difference-between-setfocusable-and-setfocusableintouchmode

關(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的應用,大家可以看到。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容