首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用复合内容描述的图像

不使用复合内容描述的图像
EN

Stack Overflow用户
提问于 2022-05-01 13:16:38
回答 1查看 426关注 0票数 1

在我的应用程序,只使用Jetpack撰写,我想显示一个图像,没有内容描述。这个元素的目标是明确地说明如何不这样做;我希望TalkBack将其发音为“handle”,并希望任何其他AccessibilityService处理它,就像服务处理它一样。因此,服务需要接收一个类名为AccessibilityNodeInfo"android.widget.ImageView"contentDescription = null节点。

谷歌尽了最大努力防止开发人员为视障者创造不好的体验,并取得了成功。没有内容描述的图像将从语义树中删除,并且不会被读出;AccessibilitityService将不会注意到它:

代码语言:javascript
复制
Image(
    painter = painter,
    contentDescription = null
)

模仿Image()并手动将角色设置为Image而不设置描述也会从语义树中删除它:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2022-05-01 16:00:02

如果您希望TalkBack将其发音为“未标记”,那么将内容描述设置为“未标记”不是一条出路吗?

问题不太清楚,但如果您希望将内容标识为与TalkBack没有什么特殊或交互的内容,则可以始终将contentDescription设置为null

基于更新

为此,您可以简单地使用AndroidView

代码语言:javascript
复制
AndroidView(
  factory = {
    ImageView(...) // Populate it here
  }
)

这本身就是一个Composable函数,所以您可以用它来交换您的Image组合,这样就可以了。

移民代码为例,全面了解API的使用情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72077060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档