繁体   English   中英

在自定义视图上启用对讲时,不会调用onTouchEvent

[英]onTouchEvent is not called when talkback enabled on custom view

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

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

但是在这种情况下,没有调用启用了对话功能的onTouchEvent方法。 只有当用户双击视图时才会调用。 我试图添加自定义OnTouchListener但它不起作用。 setFocusable=truesetFocusableInTouchMode=true

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

要在启用可访问性时捕获onHoverEvent ,和/或覆盖此行为,应覆盖View类的onHoverEvent方法。 通过使用此方法,您可以捕获单个触摸按下 ACTION_HOVER_ENTER移动ACTION_HOVER_MOVE向上 移动ACTION_HOVER_EXIT

您也可以通过修改捕捉的动作覆盖此行为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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM