TouchMode 101

1. 啥是 TouchMode

現在的智能設備,包括智能手機、平板電腦、智能電視等,可以有多種交互/輸入方式,常見的方式有觸屏、藍牙外接鍵盤、外接手柄、遙控器等。其中觸屏方式就是 TouchMode。

2. 爲啥要有 TouchMode

說道交互,就繞不開一個東東:焦點。焦點是一種狀態,標誌當前正在接收用戶輸入動作。常見的有輸入框控件中的光標閃動、按鈕高等。特別是在智能電視上,需要通過焦點來實時告訴用戶即將接收點擊事件的目標控件。而觸屏方式下,比如按鈕,是不需要焦點的。即,同一個控件,在不同的交互方式下,需要展示不同的狀態。顯然,爲了實現這一點,安卓系統需要感知到當前的交互方式是觸屏還是鍵盤等。於是就產生了 TouchMode,用於表徵當前系統的輸入方式爲觸屏模式。
注意,外接鍵盤和屏幕上的軟鍵盤是兩種不同的交互方式,前者不是 TouchMode,而後者屬於 TouchMode。

3. 何時使用 TouchMode

TouchMode 是由系統控制的。當用戶使用觸屏時,比如滑動、點擊等操作,系統就進入 TouchMode;當用戶使用外接鍵盤時,比如點擊方向鍵時,系統就離開 TouchMode。

4. 如何使用 TouchMode

  • TouchMode 是跨 Activity 的,即 TouchMode 是系統屬性,不存在某個 Activity 處於 TouchMode 而其他 Activity 處於非 TouchMode 的情況,可以通過 View#isInTouchMode()
    方法判斷當前系統是否處於 TouchMode;
  • 當控件擁有 focus 的時候,click 事件纔會被執行;
  • 設備進入 TouchMode 後,控件之前的 selection 和 focus 狀態會被清除,比如,Item 全是 TextView 的 RecyclerView,當在非 TouchMode 下點擊方向鍵時,會從屏幕上第一項開始選中 item,當進入 TouchMode 後這些選中狀態都會被清除;
  • View#setFocusable(false)會導致 View#setFocusableInTouchMode(false);
  • View#setFocusableInTouchMode(true)會導致 View#setFocusable(true);

5. 參考文獻

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