Talkback не объявляет «нажмите, чтобы активировать» для кнопки - PullRequest
0 голосов
/ 19 марта 2020

Я хочу дать следующую последовательность событий Talkback, когда пользователь переходит к DialogFragment,

1) При переходе к DialogFragment первоначальный фокус должен быть положительным. Кнопка

2 ) заголовок + описание диалога должно быть объявлено без выделения его TextView

2) и, наконец, оно должно зачитать положительное описание содержания кнопки

override fun onResume() {
        super.onResume()
        positiveButton.contentDescription = "OK"
        positiveButton.announceForAccessibility(dialogArguments.title+dialogArguments.message)
        positiveButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT)
        ViewCompat.setAccessibilityDelegate(positiveButton, object : AccessibilityDelegateCompat() {
            override fun onPopulateAccessibilityEvent(host: View?, event: AccessibilityEvent?) {
                super.onPopulateAccessibilityEvent(host, event)
                event?.text?.clear()
                positiveButton.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null)
            }
        })
    }

Приведенный выше код работает согласно требуемая последовательность, но она не объявляет тип класса, т. е. описание кнопки и действия «нажмите select для активации» в конце

1 Ответ

0 голосов
/ 20 марта 2020

У вас есть немного кода, который пытается контролировать работу пользователя TalkBack. Как правило, мы рекомендуем просто предоставить правильную информацию API доступа и разрешить TalkBack обработать передачу ее пользователю.

Мы не рекомендуем устанавливать фокус доступа вообще. Установка его на каждое событие доступности может привести к некоторым довольно нежелательным побочным эффектам.

Что, если вы просто удалите весь этот код, кроме, может быть, описания контента, если у кнопки нет текста (хотя это может быть в xml)?

Мы знаем, что первоначальный фокус TalkBack в диалогах не всегда оптимален, но, поскольку TalkBack делает это, он должен быть одинаковым для всех приложений. И если мы найдем лучшее решение, оно будет последовательно лучше в разных приложениях. Временное решение, подобное этому коду, может прерваться при изменении TalkBack.

...