微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对自定义Android View的对讲支持

如何解决对自定义Android View的对讲支持

我有一个自定义Android视图,该视图由许多TextView和EditText组成。在“视图”上没有进行任何辅助功能的情况下,我遇到的认对讲行为是将焦点放在第一个EditText上,然后大声读取其内容,然后从那里继续大声读出每个EditText的内容

我希望当自定义view最初以可访问性焦点导航到时,它会朗读整个View组并给出合理的描述(此描述必须是动态的,因为每个EditText中出现的文本都可能会更改)。

所以我已经通读了Making custom views more accessible,但仍然遇到问题。

我用以下标记了我的自定义视图:

setFocusable(true);
setFocusableInTouchMode(false);
setContentDescription("This is a content description");
setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);

我将focusableInTouchMode设置为false是因为我仅出于可访问性的目的而希望此视图可聚焦(尽管坦率地说,我并不认为这是实现此目的的正确方法)。

我还为该视图提供了虚假的内容描述,以尝试简单地听到TalkBack读取的自定义内容,但我还没有听到大声朗读的描述。

我已覆盖以下四种可访问性方法

@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
  return super.dispatchPopulateAccessibilityEvent(event);
}

通过日志记录,我发现由于某种原因super.dispatchPopulateAccessibilityEvent(event)总是返回false。

@Override
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
  super.onPopulateAccessibilityEvent(event);
  event.getText().add("on populate accessibility event");
}

@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
  super.onInitializeAccessibilityEvent(event);
}

@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
  super.onInitializeAccessibilityNodeInfo(info);
  info.setClassName(FooBar.class.getCanonicalName());
}

在进行了上述更改之后,我发现可以对自定义view赋予可访问性焦点,但是这种情况下,即使在EditTexts之后,也只能朗读TextViews的内容(静态内容),而不是大声朗读EditTexts。已被填充。

有没有人可以给我一些技巧,以使我了解如何以自定义视图的方式运行我的自定义视图?我有点Android初学者,所以如果不能从文档中获得尽可能多的信息,请原谅我。

如果有帮助,我也很乐意提供有关View本身的更多详细信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。