6

我正在为密码字段实现自定义键盘(通过自定义视图)并尝试添加辅助功能,因此当用户单击视图时,它应该发音为选定的值。

在我的自定义键盘中,我需要坐标,MotionEvent以便视图可以计算按下的绘图(值)。

但是在这种情况下,onTouchEvent不调用启用对讲的方法。它仅在用户双击视图时调用。我试图添加自定义OnTouchListener,但它不起作用。setFocusable=truesetFocusableInTouchMode=true

4

2 回答 2

9

对于那些遇到这个问题并寻找解决方案的人;启用辅助功能(对讲)后,onTouchEvent不会在单击时调用方法,而是在双击时调用它。

要在启用可访问性时捕获单击和/或覆盖此行为,应覆盖类onHoverEvent的方法。通过使用这种方法,你可以捕捉单次View移动和向上。ACTION_HOVER_ENTERACTION_HOVER_MOVEACTION_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;
}
于 2016-02-10T08:35:26.290 回答
1

启用 TalkBack 后,双击相当于单击一次。也就是说,只有当用户双击视图/小部件时才会调用 onTouchEvent。

于 2014-10-23T06:09:45.933 回答