Доступность Обратный разговор не будет прерываться
Я работаю над приложением для Android и проверяю доступность. В нашей MainActivity у нас есть левое навигационное окно DrawerView, и мы загружаем различные фрагменты в виде рециркулятора, основываясь на левом навигационном выборе пользователя.
При тестировании доступности / обратной связи мы заметили, что если обратная связь сфокусирована на элементе в представлении загруженного в данный момент фрагмента фрагментов, при открытии левой навигационной панели он часто продолжает читать элемент из фонового фрагмента (то есть ящик открыт и находится спереди). фрагмента).
Мы пытаемся, чтобы Accessibility прекратил читать вслух то, что когда-либо было фоном, и читал первый вид макета ящика, когда он открывается.
Я добавил вызов для очистки фокуса на OpenDrawer open так, думая, что тогда он по умолчанию будет первым элементом в ящике, как только он восстановит фокус. Фокус действительно падает на первый элемент в моем представлении ящика по желанию, но он продолжает воспроизводить фоновый элемент до его завершения, а затем, наконец, читает левый элемент навигации, на котором он сфокусирован.
@Override
public void onDrawerOpened(View drawerView) {
//Clear Current Focus to allow Drawer items to take
drawerView.bringToFront();
getCurrentFocus().clearFocus();
super.onDrawerOpened(drawerView);
Я попробовал такой же подход в onDrawerSlide, а также пытался прервать разговор, например, так:
View focused = getCurrentFocus();
if (focused != null) {
((AccessibilityManager) focused.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE)).interrupt();
Журнал помог мне убедиться, что я никогда не получал нулевое представление о текущем фокусе.
У кого-нибудь есть какие-либо советы или решения?
1 ответ
Я не мог понять, если при открытии левой навигационной панели он получает фокус, и только TalkBack остается позади, или фокус остается позади...
Если навигация получает фокус, и это только проблема TalkBack, тогда поместите следующий атрибут в элемент, который получает начальный фокус в навигацию -
android:accessibilityLiveRegion="assertive"
Это заставит TalkBack остановить предыдущую сессию чтения и начать чтение нового фокуса.
Теперь, если проблема в том, что вы даже не получаете фокус там, потому что он остается позади, добавьте эту функцию публикации, которая вызывает фокус, к определенному представлению, которое вы хотите получить, когда откроется навигация. Поместите его в onClick, который открывает навигацию, чтобы он инициировал ее после открытия -
myCustomView.post(new Runnable() {
@Override
public void run() {
myCustomView.requestFocus();
myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
}
});
Надеюсь, это поможет вам.