gpt4 book ai didi

android - 我可以为仅由 TalkBack 宣布的 TextView 提供额外的标签,而不是在视觉上显示吗?

转载 作者:搜寻专家 更新时间:2023-11-01 09:31:41 27 4
gpt4 key购买 nike

假设我有一个项目列表,每个项目中的一个 View 是一条消息,在一个简单的 TextView 中,用代码填充(来自后端服务的动态数据)。

<TextView
android:id="@+id/message"
style="@style/DefaultText"
/>

在视觉上它不需要标签;列表项布局非常清晰。但是听着 TalkBack 是如何读屏的,我觉得给它加上一个“标签”或者描述会很有用。这样 TalkBack 就会读出如下内容:

Message: [the actual dynamic message content]

我的问题是:是否可以为 TextView 添加标签/描述,首先,不会替换 TextView 的内容,但会与其一起阅读 ,其次,只影响 TalkBack(不影响视觉呈现)?

我尝试过的:

    TextView 的
  • contentDescription。不起作用:如果设置,则不会公布实际内容, contentDescription。嗯,也许如果我在代码中设置它并在实际内容前面加上描述...但是没有更简单的方法吗?
  • 用指向@+id/messagelabelFor 分隔TextView。问题是它也以视觉方式显示并搞砸了设计。如果我以某种方式使其不可见,TalkBack 似乎也不会读取它。

最佳答案

好的,我找到了两个解决方案!正如问题中提到的,我宁愿避免在代码中这样做,但为了获得最佳结果,这似乎是可行的方法。

在 XML 中使用 android:hint

最简单的方法是为TextView设置android:hint="Message"。 TalkBack 在实际文本之后读取它:

[the actual dynamic message content] Message

根据我的需要,消息是可选的,这有一些缺点:即使 TextView 没有实际内容(我更愿意省略它),提示也会被宣布,在这种情况下,它也会以视觉方式显示(不是我想要的)。此外,我更希望 TalkBack 在实际文本之前阅读提示。

以编程方式设置contentDescription

没有那么简单,但也不复杂,您可以完全控制 TalkBack 所说的内容。

在我的例子中,如果消息丢失并在消息内容之前读取它,我更愿意省略描述,我会在填充列表项的代码中做这样的事情:

textView.setText(message);
if (!TextUtils.isEmpty(message)) {
textView.setContentDescription(
context.getString(R.string.message_desc, message));
}

有资源:

<string name="message_desc">Message: %s</string>

关于android - 我可以为仅由 TalkBack 宣布的 TextView 提供额外的标签,而不是在视觉上显示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710111/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com