如何更改双击和长按的Android对讲说明

Pau*_*aul 10 android accessibility talkback android-a11y

我有一个有长按动作处理程序的视图.我使用内容描述来设置消息,当视图获得焦点时,Talkback会说话.

目前它在获得焦点后立即说出了我的内容描述,并在短暂停顿后说:

双击激活,双击并按住长按

我想将此消息更改为类似的内容

双击"动作1",双击并按住"动作2"

有办法吗?

我调查了onPopulateAccessibilityEvent(),它得到了TYPE_VIEW_ACCESSIBILITY_FOCUSED事件,但我无法更改所需的消息.

我错过了一些简单的事吗?

Jus*_*ris 9

AccessibilityAction阿兰夫发表答案以来,似乎有所改变.这是一个使用的工作解决方案ViewCompat:

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() {
    @Override
    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
        super.onInitializeAccessibilityNodeInfo(host, info);
        // A custom action description. For example, you could use "pause"
        // to have TalkBack speak "double-tap to pause."
        CharSequence description = host.getResources().getText(R.string.my_click_desc);
        AccessibilityActionCompat customClick = new AccessibilityActionCompat(
                    AccessibilityNodeInfoCompat.ACTION_CLICK, description);
        info.addAction(customClick);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 如何防止它说出“双击到” (3认同)

ala*_*anv 8

在API 21+中,您可以通过在View上设置自定义操作来自定义操作名称AccessibilityNodeInfo.有两种方法:1)设置AccessibilityDelegate和覆盖onInitializeAccessibilityNodeInfo委托方法或2)扩展视图的类和覆盖onInitializeAccessibilityNodeInfo.

无论哪种方式,您将构建一个新的AccessibilityAction并使用AccessibilityNodeInfo.addAction在节点上设置它.

如果您选择使用委托,则应为单击操作设置自定义说明,如下所示:

view.setAccessibilityDelegate(new AccessibilityDelegate() {
  @Override
  public void onInitializeAccessibilityNodeInfo(
      View v, AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(v, info);

    // A custom action description. For example, you could use "pause"
    // to have TalkBack speak "double-tap to pause."
    CharSequence description = getResources().getText(R.string.my_click_desc);
    AccessibilityAction customClick = new AccessibilityAction(
            AccessibilityAction.ACTION_ACTION_CLICK, description);
    info.addAction(customClick);
  }
});
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序目标API <21,请替换相应的*Compat支持库方法.该功能未向后移植,因此您无法获得API <21的自定义说明,但您可以避免在应用程序代码中进行显式版本检查.

  • 这只是为我代替了硬道理。句子“双击到”的第一部分仍然可用。是否可以替换整个句子? (2认同)

Aze*_*ela 7

对于那些想要删除所有短语 ie 的人,请使用下面的代码。“双击激活”,“双击并按住以长按”。

mSubTitleText = (TextView) view.findViewById(R.id.txt_subtitle);

 ViewCompat.setAccessibilityDelegate(mSubTitleText, new AccessibilityDelegateCompat() {
            @Override
            public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
                host.setClickable(false);
                host.setLongClickable(false);
            }
        });
Run Code Online (Sandbox Code Playgroud)

  • @IgorGanapolsky 你有没有想过如何防止辅助功能说“双击激活”? (4认同)