如何修改 Android 上可点击视图的 TalkBack 使用提示?

How can I modify the TalkBack usage hint for a clickable View on Android?

默认情况下,Android 上的可点击视图将在内容描述后呈现一个使用提示,该提示会被大声朗读(如果启用了 TalkBack 并且用户专注于该视图):

"Double tap to activate"

我能否更改此设置,使其针对我的应用读出不那么抽象、更具体的内容?喜欢:

"Double tap to play video"

是的,这绝对有可能!

覆盖 onInitializeAccessibilityNodeInfo 方法

如果您有自定义视图,您可以覆盖 onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) 方法并添加一个带有 ACTION_CLICK ID 的操作,以覆盖标签:

@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.addAction(
            new AccessibilityNodeInfo.AccessibilityAction(
                    AccessibilityNodeInfo.ACTION_CLICK,
                    "play video"
            )
    );
}

如果该视图有点击侦听器,那么通过添加这个新的 Action,您将覆盖默认标签,因此 TalkBack 会说 "Double tap to "。

这仅在 API 上可用 21 - 如果您想要在较低 API 版本上工作的东西或者想在非自定义视图上设置自定义用法提示怎么办?您可以使用 ViewCompatAccessibilityDelegateCompat!

改为使用 AccessibilityDelegate

它非常相似 - 您可以在您扩展的自定义 AccessibilityDelegate 中覆盖等效方法:

public static class PlayVideoAccessibilityDelegate extends AccessibilityDelegateCompat {

    @Override
    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
        super.onInitializeAccessibilityNodeInfo(host, info);
        info.addAction(
                new AccessibilityNodeInfoCompat.AccessibilityActionCompat(
                        AccessibilityNodeInfoCompat.ACTION_CLICK,
                        "play video"
                )
        );
    }
}

然后要使用它,您可以将委托设置为 ViewCompat:

ViewCompat.setAccessibilityDelegate(playButton, new PlayVideoAccessibilityDelegate());

使用辅助工具

Novoda 有一个实用程序库来帮助 Android 上的可访问性。这包括一些帮助设置使用提示的工具:

UsageHintsAccessibilityDelegate delegate = new UsageHintsAccessibilityDelegate(resources);  
delegate.setClickLabel("play video");

ViewCompat.setAccesibilityDelegate(playButton, delegate);

我写了一篇blogpost which is an overview of accessibilitools(我也是图书馆的贡献者)。