Android開發中的View類的視圖屬性focusableInTouchMode這個屬性跟focusable有什麼區別?

要理解這個屬性,首先你得知道,Android不是隻面向手機的,它還有可能被安裝在電視等非觸摸輸入設備上.即使是在手機上,目前很多手機也都支持鍵盤輸入了.
focusable這種屬性,更多的是爲了解決非觸摸輸入的,因爲你用遙控器或鍵盤點擊控件,就必然要涉及到焦點的問題,只有可以獲得焦點的控件才能響應鍵盤或者遙控器或者軌跡球的確定事件.

然後再反過來看focusableInTouchMode.這個屬性的意思一如字面所述,就是在進入觸摸輸入模式後,該控件是否還有獲得焦點的能力.
可以簡單的理解爲,用戶一旦開始通過點擊屏幕的方式輸入,手機就進入了"touch mode".
focusableInTouchMode這種屬性,多半是設給EditText這種即使在TouchMode下,依然需要獲取焦點的控件.(請自行想下EditText爲什麼在touch mode下也需要焦點).
比如Button之類的控件,在touch mode下,就已經沒有獲取焦點的必要了.
咱們想象一下EditText實際的樣子.
Android裏面EditText是用來接受用戶輸入的,那問題是在touch mode下我們沒鍵盤,怎麼辦呢,android會主動給我們彈出一個軟鍵盤出來(或者是手寫輸入法,這些無所謂...).
那現在想象,我們的界面上有五個這種EditText,那彈出的軟鍵盤的輸入,到底要寫在哪個EditText上呢?
所以這裏就需要焦點來介入了.只有獲得了焦點的那個EditText,才能獲取軟鍵盤的輸入.

這其實就跟你在電腦上輸入是一樣的場景,你在電腦上輸入,會首先用鼠標(或者tab鍵選取)點擊某個輸入框,這時候這個輸入框就獲取焦點了,你再敲鍵盤的話,輸入的字符就會顯示在獲取焦點的那個輸入框裏了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章