TouchMode 101

作者: 陈蒙_ | 来源:发表于2019-06-13 10:36 被阅读5次

    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. 参考文献

    相关文章

      网友评论

        本文标题:TouchMode 101

        本文链接:https://www.haomeiwen.com/subject/hwdjfctx.html