当 TextView 包含 foo bar 04:58
时,TalkBack 会显示 foo bar 4 小时 58 分钟
- 应该是 foo bar 4 分钟 58 秒
。另一方面,foo bar 04:24:05
工作正常:foo bar 4 小时 24 分 5 秒
。顺便说一句,我的语言环境是法语。
我想到了对此进行不优雅的修复:
- 将每个
mm:ss
替换为00:mm:ss
- 将每个
mm:ss
替换为mm 分钟 ss 秒
有更好的解决方案吗?
最佳答案
这是我极少数建议用内容描述覆盖文本的情况之一。你必须将其扩展。
假设您有一个 TextView
textView.setText("2:45")
textView.setContentDescription("2 minutes 45 seconds")
TextView 上的内容描述充当替代文本,并将被读出。这实际上会产生其他可访问性问题。想象一下 AT 读出文本和内容描述,而不是使用内容描述作为覆盖......呃。但在当前的 Android Accessibility 生态系统中,TalkBack 拥有压倒性的市场份额,因此该解决方案并非完全邪恶。理想情况下,文本转语音引擎不会很愚蠢。但是,由于 TTS 引擎很愚蠢,我们必须更改 TalkBack 看到的文本,以便读出合理。
您也可以保留它,并注意 TalkBack 用户可以根据需要按字符探索文本,因此他们可以找出奇怪的 TTS 自动格式。您也可以尝试将 View 更改为如下所示:
textView.setText("2m 45s");
不过,如果我没记错的话,TTS 引擎会将其扩展为“2 米四十五”……太棒了。
编辑:我想这行代码将有助于解决您的其他问题。
timeString.replaceAll("([0-9]{1,2}):([0-9]{1,2})", "$1 minutes $2 seconds");
关于android - TalkBack 读取时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44019930/