Как связать кнопки с родительским представлением и объявить пользователю с TalkBack?
Я пытаюсь заставить TalkBack работать для моего приложения Android, в макете приложения у меня есть список CardViews внутри RecyclerView, каждый CardView содержит несколько TextViews и несколько кнопок: Изображение макета приложения
Когда я включаю Android TalkBack и нажимаю на CardView, TalkBack объявляет все TextViews, но не сообщает ни о какой кнопке. Если я продолжу смахивать вправо, кнопки получат фокус по одной. Не уверен, что мое понимание верно, но похоже, что TalkBack обрабатывает TextViews и Buttons по-разному, потому что кнопки являются фокусируемыми.
Есть ли способ заставить TalkBack объявлять весь контент в CardView (TextViews и Buttons) и сохранять фокусируемость кнопок (так что я все еще буду в состоянии установить фокус на кнопках, проводя пальцем)?
PS:
Одно из решений, которое сработало, заключается в том, чтобы напрямую задать описание содержимого в CardView и сделать описание содержимого содержащим все содержимое TextViews и кнопок, но это довольно странно, поэтому я пытаюсь найти лучшее решение здесь.
Любая помощь приветствуется. Спасибо!
2 ответа
Описанное вами поведение является ожидаемым, и ваше решение является правильным.
Для ViewGroups без явного описания содержимого TalkBack попытается вывести одно из дочерних элементов путем объединения описания содержимого (или текстового значения, если представление расширяется из TextView) всех дочерних элементов.
Поскольку сами кнопки являются активными (фокусируемыми / активируемыми), они не включены в предполагаемое описание содержимого.
Правильный подход к указанию на карточке подробного описания контента - ваша цель должна состоять в том, чтобы описать информацию, которую представляет карточка. IMO, он не должен содержать описание кнопок, так как они будут фокусироваться отдельно и будут читаться вслух, когда пользователь фокусируется на них.
Наилучший подход IMO - это скрыть кнопки, если включен TalkBack, и представить карточки как сущности, которые содержат одно действие и одно, явно заданное описание контента.
Важно не снижать функциональность для пользователей TalkBack - все достижимые цели пользователя все же должны быть достижимы; не требуется, чтобы цели были достигнуты одинаково для всех пользователей. Таким образом, в этом случае вы можете сделать основное действие карты как действие щелчка и предложить действия с помощью кнопок в другом месте приложения.
Один шаблон, который работает хорошо, это отображать диалог по щелчку, и он содержит все действия. Это имеет несколько преимуществ:
- карта является одним действием, поэтому навигация между картами осуществляется только одним движением
- диалог по умолчанию доступен по умолчанию - дополнительная работа не требуется
Я написал сообщение в блоге, объясняющее, как вы можете сделать это с (и без) библиотекой, которую я помог написать. Раздел под "диалогом действий" является соответствующим битом.
Кнопка активна. Если вы хотите, чтобы ваши пользователи могли выполнять действия для каждой кнопки, они должны быть сфокусированы отдельно. Если они не действуют, они не должны быть кнопками.