2015-09-16 5 views
0

В настоящее время я добавляю доступность в качестве новой функции внутри своего приложения. Моя цель состоит в том, что пользователь будет осуществлять навигацию с помощью сервиса TalkBack, интегрированного Android.Как активировать Talkback внутри фрагментов?

Все работает хорошо, так как я устанавливаю описание контента на элементы, которые находятся внутри моей деятельности макете т.е.

 <View 
      style="@style/custom.style" 
      android:contentDescription="@string/my_string_value"/> 

Таким образом, каждый раз, когда отображается моя активность озвучиваться является чтение значение описания содержимого.

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

для того, чтобы получить результат, как и тот, что я ожидаю, что я это это внутри класса фрагмента:

public abstract class myFragment extends Fragment { 
... 
    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ... 
     myCustomView = (LinearLayout) rootView.findViewById(R.id.duende); 
     myCustomView.requestFocus(); 
    } 
} 

Это не имели успеха до сих пор, установка же вещь доступность изменен.

getWindow().getDecorView().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); 

Неужели кто-нибудь столкнулся с подобной проблемой?

ответ

0

Во-первых, важно отметить, что функции фрагментов не отличаются от макетов в рамках обычных действий. Фрагменты - это просто удобный способ структурирования кода. Какие Android/API доступности доступны, если вы кодируете приложение как серию фрагментов, или куча макетов в рамках одного действия идентична. При этом, я считаю, что вы ищете следующее:

Что вам нужно сделать, это перемещение фокуса доступности.

myCustomView.requestFocus(); 

перемещает то, что я считаю фокусом ввода. Это не повлияет на TalkBack и на самом деле все, но совершенно бессмысленно, если вы не используете клавиатурную навигацию, или мы говорим об окне EditText. То, что вы хотите сделать, - это перемещение в Accessibility/TalkBack. Это может быть достигнуто с помощью следующей строки кода:

myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); 

Примечание: Пожалуйста, имейте в виду WCAG критерии 2.0, особенно когда дело доходит до перемещения фокуса вокруг на пользователей TalkBack автоматически. Это может стать очень запутанным для не подозреваемых пользователей!

Смежные вопросы