我正在为密码字段实现自定义键盘(通过自定义视图)并尝试添加辅助功能,因此当用户单击视图时,它应该发音为选定的值。
在我的自定义键盘中,我需要坐标,MotionEvent
以便视图可以计算按下的绘图(值)。
但是在这种情况下,onTouchEvent
不调用启用对讲的方法。它仅在用户双击视图时调用。我试图添加自定义OnTouchListener
,但它不起作用。setFocusable=true
和setFocusableInTouchMode=true
。
对于那些遇到这个问题并寻找解决方案的人;启用辅助功能(对讲)后,onTouchEvent
不会在单击时调用方法,而是在双击时调用它。
要在启用可访问性时捕获单击和/或覆盖此行为,应覆盖类onHoverEvent
的方法。通过使用这种方法,你可以捕捉到单次View
触地,移动和向上。ACTION_HOVER_ENTER
ACTION_HOVER_MOVE
ACTION_HOVER_EXIT
您还可以通过修改 catch 的操作MotionEvent
并将其发送到onTouchEvent
方法来覆盖此行为,如下所示:
@Override
public boolean onHoverEvent(MotionEvent event) {
if (accessibilityManager.isTouchExplorationEnabled() && event.getPointerCount() == 1) {
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_HOVER_ENTER: {
event.setAction(MotionEvent.ACTION_DOWN);
} break;
case MotionEvent.ACTION_HOVER_MOVE: {
event.setAction(MotionEvent.ACTION_MOVE);
} break;
case MotionEvent.ACTION_HOVER_EXIT: {
event.setAction(MotionEvent.ACTION_UP);
} break;
}
return onTouchEvent(event);
}
return true;
}
启用 TalkBack 后,双击相当于单击一次。也就是说,只有当用户双击视图/小部件时才会调用 onTouchEvent。