如何让TalkBack自动读取TextView的错误消息?

7

我目前正在使我的应用程序具有可访问性,在我的EditText上遇到了问题:

在每个EditText中,用户的输入在某些时刻(例如点击按钮后)被验证,如果输入无效,我会使用editText.setError("message") 显示错误。问题是,在TalkBack开启时,它不会自动聚焦和读取错误消息。此外,由于我无法获取错误消息的视图,因此我无法通过 sendAccessibilityEvent 要求TalkBack将其聚焦。

我希望能够在仍然使用 editText.setError() 的情况下解决这个问题,欢迎提出任何想法。

编辑1:添加了 @Abhishek V 解决方案的代码:

public class BaseEditText extends EditText {

    ...
    ...

    @Override
    public void setError(CharSequence error) {
        super.setError(error);
        announceForAccessibility(error);
    }
}
1个回答

12

通过View提供的announceForAccessibility("mesage")函数,您可以明确地读取错误消息。

editText.setError("message")
editText.announceForAccessibility("message");
请注意,此函数是在API级别16中添加的。

更新1:当在EditText中更改文本以防止反复读取错误消息时,请将错误消息设置为null

 editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                editText.setError(null);
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

谢谢您的回答,但仍有两个问题:1. Talkback没有聚焦在错误信息上(不是很重要)2. 当我在显示错误信息后输入editText时,Talkback会再次读取错误信息 - 在视觉错误已经消失之后。有什么办法解决这些问题吗? - Tako
1
好的,问题已经解决了。谢谢! - Tako
嗨Abhisek,我正在使用一个EditText来输入邮政编码。在输入4587之后,它读取成“four thousand eight seven”,但是我想要读作“Four Five Eight Seven”。你对以上代码有任何更新吗?有什么建议吗? - harikrishnan
@harikrishnan 我想你可以编程地在每个字符之间添加空格。这样它应该会将其读取为单独的数字。 - Abhishek V
谢谢您的回复。我在TextView中尝试了它,结果读取正常。同样适用于EditText。但是,它的读取结果不如预期。如果可能,请尝试一下带有邮政编码数字的EditText,并告诉我们是否可行。 - harikrishnan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接