Android的TouchMode
什么是TouchMode
TouchMode就是”触摸模式“。在一般情况下,Android系统都是处于TouchMode的模式下也就是View.isInTouchMode() == true
的状态下。大多Android开发都是开发的手机App应用,所以可能没有接触或使用过TouchMode,而在开发Android TV应用或其他没有触摸屏的应用时会接触到这个TouchMode,但一旦使用遥控器遥控或调用了View.requestFocusFromTouch
等可以更改TouchMode的方法后,系统就会退出TouchMode,当用户点击屏幕后,就会进入触屏模式也就是TouchMode模式。
TouchMode的影响
是否处于TouchMode会对控件的焦点(focus)产生影响。
当处于TouchMode时,直接请求requestFocus()
是无效的,因为requestFocus()
会最终调用到View.requestFocusNoSearch()
1 | private boolean requestFocusNoSearch(int direction, Rect previouslyFocusedRect) { |
而其内部进行判断了isInTouchMode()
,当处于触摸模式下,会直接返回false,导致请求焦点失败。
在这个模式下,大多是View是无法获取到焦点的,如果你在开发TV应用时,发现每当开机后,焦点不能准确的选中设定的那一个,那么就需要检查下你的TouchMode与是否使用了requestFocus()
进行请求焦点。
像一些EditView等一些特殊的View,是可以下TouchMode下获取到焦点的,因为这些View的isFocusableInTouchMode()为true,其他的View被点击时不会获得焦点,只是会触发onClick()
如何更改TouchMode
- 退出TouchMode
直接调用View.requestFocusFromTouch()
1 | // View.requestFocusFromTouch |
- 进入TouchMode
随意点击或滑动即可进入TouchMode模式
1 | // Enter touch mode on down or scroll, if it is coming from a touch screen device, |
Android的TouchMode