Доступность Обратный разговор не будет прерываться

Я работаю над приложением для 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);
    }
});

Надеюсь, это поможет вам.

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