如何让 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) {
}
});
我目前正在使我的应用程序可访问,但我的 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);
}
}
您可以通过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) {
}
});