7

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

在每个 EditText 中,用户的输入都会在某个时候得到验证(例如,在按下按钮后),如果输入无效,我会使用editText.setError("message"). 问题是如果 TalkBack 开启,它不会自动聚焦并读取错误。另外,由于我无法查看错误的视图,因此我无法通过sendAccessibilityEvent.

我将不胜感激有关如何在仍在使用editText.setError().

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

public class BaseEditText extends EditText {

    ...
    ...

    @Override
    public void setError(CharSequence error) {
        super.setError(error);
        announceForAccessibility(error);
    }
}
4

1 回答 1

11

announceForAccessibility("mesage")您可以通过提供的功能显式读出错误消息View

editText.setError("message")
editText.announceForAccessibility("message");

请注意,此功能是在API 级别 16中添加的。

update 1:将错误信息设置null为更改文本时,EditText以防止一次又一次地阅读错误信息。

 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) {

            }
        });
于 2016-12-08T06:30:55.590 回答