在我的应用程序,只使用Jetpack撰写,我想显示一个图像,没有内容描述。这个元素的目标是明确地说明如何不这样做;我希望TalkBack将其发音为“handle”,并希望任何其他AccessibilityService处理它,就像服务处理它一样。因此,服务需要接收一个类名为AccessibilityNodeInfo的"android.widget.ImageView"和contentDescription = null节点。
谷歌尽了最大努力防止开发人员为视障者创造不好的体验,并取得了成功。没有内容描述的图像将从语义树中删除,并且不会被读出;AccessibilitityService将不会注意到它:
Image(
painter = painter,
contentDescription = null
)模仿Image()并手动将角色设置为Image而不设置描述也会从语义树中删除它:
Layout(
{},
modifier
.semantics { this.role = Role.Image }
.paint(painter)
) { _, constraints ->
layout(constraints.minWidth, constraints.minHeight) {}
}此外,当我使用包含没有内容描述的ImageView的xml布局时,这不会显示为任何可访问性服务的元素。
组合实现MyNodeProvider,这是一个AccessibilityNodeProvider,它是连接可访问性服务和应用程序之间的Android桥。这是一个用描述填充AccessibilityNodeInfo或从树中删除它的类。因为这是私人的,所以不能改变。
是否可以通过复合使元素以"android.widget.ImageView"形式显示为contentDescription = null
发布于 2022-05-01 16:00:02
如果您希望TalkBack将其发音为“未标记”,那么将内容描述设置为“未标记”不是一条出路吗?
问题不太清楚,但如果您希望将内容标识为与TalkBack没有什么特殊或交互的内容,则可以始终将contentDescription设置为null。
基于更新的
为此,您可以简单地使用AndroidView。
AndroidView(
factory = {
ImageView(...) // Populate it here
}
)这本身就是一个Composable函数,所以您可以用它来交换您的Image组合,这样就可以了。
以移民代码为例,全面了解API的使用情况。
https://stackoverflow.com/questions/72077060
复制相似问题