如何让 TalkBack 自动读出 TextView 的错误信息?

How to make TalkBack read TextView error message automatically?

我目前正在使我的应用程序可访问,但我的 EditTexts 有问题:

在每个 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);
    }
}

您可以通过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) {

            }
        });