Подтвердить что ты не робот

Android - установите фокус доступности AccessBack для определенного вида

Когда TalkBack включен, есть ли способ установить руководство по ориентации доступности для определенного вида? Например, когда моя активность запущена, я хочу, чтобы TalkBack автоматически фокусировался на определенной кнопке (желтая рамка вокруг представления) и читал ее описание содержимого.

Что я пробовал до сих пор:

    myButton.setFocusable(true);
    myButton.setFocusableInTouchMode(true);
    myButton.requestFocus();

requestFocus(), похоже, запрашивает фокус ввода и не имеет никакого отношения к фокусу доступности. Я также пробовал:

    myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
    myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
    myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
    myButton.announceForAccessibility("accessibility test");
    myButton.performAccessibilityAction(64, null); // Equivalent to ACTION_ACCESSIBILITY_FOCUS

    AccessibilityManager manager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
    if (manager.isEnabled()) {
        AccessibilityEvent e = AccessibilityEvent.obtain();
        e.setSource(myButton);
        e.setEventType(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
        e.setClassName(getClass().getName());
        e.setPackageName(getPackageName());
        e.getText().add("another accessibility test");
        manager.sendAccessibilityEvent(e);
    }

Ничто из этого не работает.

4b9b3361

Ответ 1

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Принуждение внимания к нагрузке на активность должно быть где угодно, но в верхней строке всегда (хорошо, всегда почти никогда не говориться), но на самом деле просто не делайте этого. Это нарушение всех видов правил WCAG 2.0, включая 3.2.1 и 3.2.3, относительно прогнозируемой навигации и изменения контекста соответственно. Вы, вероятно, фактически делаете свое приложение БОЛЕЕ недоступным, делая это.

http://www.w3.org/TR/WCAG20/#consistent-behavior

КОНЕЦ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ.

Вы используете правильные вызовы функций. Все, что вам нужно сделать, это следующее:

myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);

Проблема скорее в том, в какой момент вы пытаетесь это сделать. Talkback присоединяется к вашей деятельности чуть позже в цикле активности. Следующее решение иллюстрирует эту проблему, я не уверен, что есть лучший способ сделать это, если честно. Я попробовал onPostResume, который является последним обратным вызовом для ОС Android, касающимся загрузки действий, и все же мне пришлось добавить задержка.

@Override
protected void onPostResume() {
    super.onPostResume();

    Log.wtf(this.getClass().getSimpleName(), "onPostResume");

    Runnable task = new Runnable() {

        @Override
        public void run() {
            Button theButton = (Button)WelcomeScreen.this.findViewById(R.id.idButton);
            theButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
        }
    };

    final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();

    worker.schedule(task, 5, TimeUnit.SECONDS);

}

Возможно, вы сможете создать собственное представление. Обратные вызовы в представлении могут обеспечить логику, необходимую для этого, без состояния гонки! Я мог бы изучить его более поздно, если я получу время.