Android 可访问性识别标题

Posted

技术标签:

【中文标题】Android 可访问性识别标题【英文标题】:Android accessibility identify heading 【发布时间】:2017-03-05 19:36:13 【问题描述】:

我有最新版本的 Talkback 及其宣布“我的***文本标题”。 android 本机行为正在为我的***元素添加“标题”。我找不到打开/关闭航向通知的方法。是否有 API 来控制其行为。在之前的 Talkback 版本中,它本身并没有宣布“标题”。

【问题讨论】:

你使用什么样的控件让它读取这个?我有相反的问题,我想让它读取标题并且不得不手动将其放入内容描述中。 @Mr_E 你能解决你的问题吗? 【参考方案1】:

您可以在 API 19+ 上启用或禁用任何 View 的“标题”可访问性属性:

ViewCompat.setAccessibilityDelegate(headingView, new AccessibilityDelegateCompat() 
  @Override
  public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) 
    super.onInitializeAccessibilityNodeInfo(host, info);
    info.setHeading(true); // false to mark a view as not a heading
  
);

如果你有 minSdk 28,你可以直接在你的 XML 中设置它:

android:accessibilityHeading="false"

【讨论】:

这个方法在哪个API中添加的? AccessibilityNodeInfoCompat#setHeading(boolean) 嗨@Adam S,这似乎对我不起作用。当您执行 setHeading(true) 时,textview 不会宣布它是一个标题。 是的,添加在28developer.android.com/reference/android/view/accessibility/…【参考方案2】:

在 API 19+ 上添加一个简单的方法:

ViewCompat.setAccessibilityHeading(headingView, false);

https://developer.android.com/reference/androidx/core/view/ViewCompat#setAccessibilityHeading(android.view.View,%20boolean)

【讨论】:

19 岁及以下。 @KornilovRuslan 文档说这是对 API 的无操作 【参考方案3】:

如果您只支持 API 级别 23 及以上,您可以简单地执行以下操作。

textView.setAccessibilityDelegate(new View.AccessibilityDelegate() 
  @Override
  public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) 
    super.onInitializeAccessibilityNodeInfo(host, info);
    //blanked to prevent talkback from announcing class/type
    info.setClassName("");
  
);

【讨论】:

【参考方案4】:

我通过在

中将标题传递为 false 来解决这个问题
AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain method.

        // set the heading attribute to false so that heading is not announced in label  

info.setCollectionItemInfo(
    AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(glp.getSpanIndex(),
 glp.getSpanSize(), spanGroupIndex, 1, false, false));

public static CollectionItemInfoCompat obtain(int rowIndex, 
int rowSpan, int columnIndex, int columnSpan,
boolean heading, boolean selected)

【讨论】:

你是怎么得到glp的,或者什么是glp?

以上是关于Android 可访问性识别标题的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewRowAction 可访问性值

Xamarin.Forms android - 调整控件大小以考虑可访问性设置

带有提示的编辑文本中的 Android 可访问性

Android - TalkBack 可访问性侧重于 Recyclerview 中的滑动删除按钮

Android 可访问性将对讲限制为仅读取可见文本

Android VideoView addSubtitleSource - 无论可访问性设置如何,都可以启用它吗?