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);
  • TouchMode 模式下,默认情况下,只有 EditText#isFocusableInTouchMode() = true,其他控件是 false;

5. 参考文献

  • Touch Mode
  • View#TouchMode
  • 说说Android中的touch mode
  • Material Design # Focus

你可能感兴趣的:(TouchMode 101)