根据Google的Android accessibility tutorial,要将一组元素视为单个信息单元,我们可以将这些元素分组到一个可聚焦的容器中,并将容器的android:focusable
属性设置为true。通过这样做,我们使屏幕阅读器知道我们希望通过一次公告来阅读此内容。
所以我创建了以下布局XML:
<LinearLayout
android:focusable="true"
...>
<TextView
android:text="Text #1"
... />
<TextView
android:text="Text #2"
... />
</LinearLayout>
通过使用AccessibilityNodeInfoCompat的setClassName方法,我将LinearLayout的类名设置为android.widget.Button
,以便TalkBack可以将视图组视为按钮。
这是我的可访问性树在此之后的样子:
Button:(0, 722 - 1080, 905):FAC:focusable:clickable
TextView:(44, 761 - 970, 813):TEXT{Text #1}:A:supportsTextLocation
TextView:(44, 813 - 970, 865):TEXT{Text #2}:A:supportsTextLocation
问题是当我的小组被屏幕阅读器聚焦时,它宣布它为“按钮,文本#1文本#2”。但是我希望它是“文本1,文本2,按钮”。
是否有一种方法可以强制“话语提示”首先并且仅在父级角色名称之后读取子级文本?