Как заставить TalkBack автоматически прочитать сообщение об ошибке TextView?

В настоящее время я делаю свое приложение доступным, и у меня возникают проблемы с моими EditTexts:

В каждом EditText пользовательский ввод проверяется в какой-то момент (например, после нажатия кнопки), и если ввод неправильный, я показываю ошибку, используя editText.setError("message"), Проблема в том, что если TalkBack включен, он не будет автоматически фокусироваться и читать ошибку. Кроме того, поскольку я не могу получить представление об ошибке, я не могу попросить TalkBack сфокусировать ее через sendAccessibilityEvent,

Буду признателен за любые идеи о том, как решить эту проблему, все еще используя editText.setError(),

Редактировать 1 Добавлен код для решения @Abhishek V:

public class BaseEditText extends EditText {

    ...
    ...

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

1 ответ

Решение

Вы можете явно прочитать сообщение об ошибке через announceForAccessibility("mesage") функция предоставлена View

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

Обратите внимание, что эта функция была добавлена ​​на уровне API 16.

обновление 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) {

            }
        });
Другие вопросы по тегам