我有一个字符串" 9039662543",当回话开启时,此字符串被读为"九百万...."在4.3 Android设备中,4.3以上的设备工作正常,通过阅读"九零三......"。我该怎么做才能解决这个问题?
答案 0 :(得分:6)
我假设这是一个电话号码?我不能说,因为没有格式化。这是问题的核心。对此有多种修复方法。
答:不管它。 TalkBack用户可以选择按视图,段落,句子,单词,字符等解析元素。如果用户无法通过上下文告诉他们电话号码,则需要更多上下文。这个数字很好!
B:更好地格式化。 (903)-966-2542 vs 9039662543,没有任何其他上下文,是两个不同的信息。它仍然可以读出类似于"圆括号9-hundread和3 ........"但更明显的是它是一个电话号码,而且这些块很容易跟踪。对不起,我没有预先设备4.3来检查实际的公告是什么。
C:覆盖内容说明。如果文本表示为:
文字:9039662543 内容简述:9 0 3 9 6 6 2 5 4 3
我建议不要采用这种方法。这两个值不一样。仅仅因为你对公告感到不舒服并不代表一个TalkBack用户会是这样。当您习惯使用TalkBack时,您将习惯于切换到不同的文本解析模式。不关心电话号码的用户会因分离版本的较慢读出而感到沮丧。让他们选择忽略它,并以更加压缩的形式迅速吹响它。另外,如果没有上下文,那么这两个数字实际上并不代表相同的事情。在这种情况下的解决方案是提供此上下文而不是更改演示文稿。分开是不相等的。
答案 1 :(得分:0)
当我看到很多人推荐ChrisCM发布的内容时,我看到默认的联系人应用程序会以不同的方式进行操作。
默认的联系人应用程序会逐位读取电话号码。它还做得更多,并且可以重用。使用的API是:
此操作的详细信息可以在此处的代码中找到:
答案 2 :(得分:0)
您可以添加零宽度的不间断空格字符“ \ ufeff”,以不可见的方式分隔数字。它将数字读取为数字。请参阅以下链接中的评论以获取更多详细信息 How to change Android Talkback in case of App name
答案 3 :(得分:0)
确保编辑文本上的输入类型是电话而不是数字:
android:inputType="phone"
而不是:
android:inputType="number"
答案 4 :(得分:0)
对于EditText,请在字符之间添加一个空格,然后在“辅助功能节点信息”中设置此文本。
ViewCompat.setAccessibilityDelegate(editText,object : AccessibilityDelegateCompat(){
override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = editText.text.toString().replace(".".toRegex(),"$0 ")
}
})
答案 5 :(得分:-1)
//add extra space to text and set that text as contentDescription
textView.setText(readbleText);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < readbleText.length(); i++) {
builder.append(readbleText.charAt(i));
builder.append("\u00A0");
}
textView.setContentDescription(builder);