Jon*_*nik 5 android textview talkback android-accessibility
假设我有一个项目列表,每个项目中的一个视图是一条消息,在一个简单的 TextView 中,它填充在代码中(来自后端服务的动态数据)。
<TextView
android:id="@+id/message"
style="@style/DefaultText"
/>
Run Code Online (Sandbox Code Playgroud)
视觉上它不需要标签;列表项布局非常清晰。但是听听 TalkBack 如何读取屏幕,我认为为其添加“标签”或描述会有所帮助。这样 TalkBack 会读到类似的内容:
留言:【实际动态留言内容】
我的问题是:是否可以为 TextView 添加标签/描述,首先,它不会替换TextView 内容,但会与其一起阅读,其次,仅影响 TalkBack(而不是视觉呈现)?
我试过的:
contentDescription对于文本视图。不起作用:如果设置,实际内容没有公布,只是在contentDescription。嗯,也许如果我在代码中设置它,并在实际内容之前添加描述......但是没有更简单的方法吗?labelFor指向@+id/message. 问题是它也被直观地显示出来并搞砸了设计。如果我让它不可见,以一种或其他方式,似乎 TalkBack 也不会读取它。 好吧,我找到了两个解决方案!正如问题中所提到的,我宁愿避免在代码中执行此操作,但似乎是要获得最佳结果。
android:hint在 XML 中使用最简单的方法是android:hint="Message"为TextView设置。TalkBack在实际文本之后读取:
[实际动态消息内容] 消息
对于我的需要,由于消息是可选的,这有一些缺点:即使 TextView 没有实际内容,也会宣布提示(那时我更愿意省略它),在这种情况下,它也会以视觉方式显示(不是我所看到的)想)。另外,我更喜欢 TalkBack在实际文本之前阅读提示。
contentDescription编程方式设置没有那么简单,但也不复杂,您可以完全控制 TalkBack 所说的内容。
在我的情况下,如果消息丢失并在消息内容之前阅读它,我宁愿省略描述,我会在填充列表项的代码中做这样的事情:
textView.setText(message);
if (!TextUtils.isEmpty(message)) {
textView.setContentDescription(
context.getString(R.string.message_desc, message));
}
Run Code Online (Sandbox Code Playgroud)
有资源:
<string name="message_desc">Message: %s</string>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2904 次 |
| 最近记录: |