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); } 

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

Solutions Collecting From Web of "Android – установите фокус доступности AccessBack для определенного вида"

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Принудительное фокусирование на нагрузке нагрузки должно быть где угодно, но на верхней панели всегда (хорошо, всегда почти никогда не говориться), но на самом деле просто не делайте этого. Это нарушение всех видов правил 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); } 

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