Android可访问的拖放

5
我正在努力制作一个可访问的Android应用程序,我们正在实现一种特定类型的拖放UI小部件(带有“抓手”)。如何将此类小部件中的事件暴露给像TalkBack这样的AccessibilityService是最佳方式?我已经查看了无障碍性文档拖放功能文档,我能想到的最好的处理方法是分配一个AccessibilityDelegate,添加适当的实现或自定义触发Accessiblity Actions。

我不太确定你会走得太远。我知道的最好的资源在Opera的开发者网络上。 - Ryan B
谢谢Ryan;不过我在寻找一些“本地”的Android相关的东西,而不是与HTML5移动开发等有关的。 - lewiSnort
2
你可以触发适当的 TYPE_ANNOUNCEMENT 事件,但目前还没有明确定义如何处理可访问性拖放操作的方法。 - alanv
1个回答

1
我在我的应用程序FPlay中遇到了同样的问题:我有一个自定义的“滑块”控件,我希望TalkBack在用户滑动手柄时说出其不同的值。
我的解决方案是在值改变时伪造事件AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED。由于这个原因,此解决方案仅适用于API 16+(对我来说足够了,我从未尝试将其移植到较低的API)。
代码:
public final class BgSeekBar extends View {

    ...

    @Override
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED)
            event.setEventType(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
        return super.dispatchPopulateAccessibilityEvent(event);
    }

    //When this method is called from within onTouchEvent(), fromUser is true
    private void setValue(int value, boolean fromUser, boolean usingKeys) {
        if (value < 0)
            value = 0;
        else if (value > max)
            value = max;
        if (this.value != value) {
            this.value = value;
            if (listener != null)
                listener.onValueChanged(this, value, fromUser, usingKeys);
            updateBar();
            if (fromUser)
                sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
        }
    }

    ...

}

*值得注意的是,这种解决方法之所以可行,是因为在该类中没有使用AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接