2015-11-03 7 views
1

Я добавляю заголовок в ListView. Заголовок имеет несколько компонентов (кнопки, TextViews, RelativeLayouts). Когда Talkback включен и заголовок выбран, весь заголовок считывается, и вы не можете выбрать отдельные компоненты. Хотя, кнопки можно выбрать, а talkback будет их читать. Но текст не раздельный.Talkback не читает изображения дочерних элементов

Как получить обратную связь для обработки всех компонентов в заголовке в виде отдельных компонентов?

ответ

1

Простой ответ: вы не можете.

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

Например, если у вас клетки, которые выглядели так:

Name: Chris 
Address: Blah blah blah 

Name: Herman 
Address: Blarg blarg blarg 

Каждая ячейка будет считываться:

Name: Chris Adress Blah Blah Blah 

Это выгодно, так как не существует никаких проблем упорядочения/данных объединения. Что делать, если данные не были объединены вместе? Адрес «Бла Бла Бла» принадлежит Крису (имя перед ним), или Герман (имя после него)? Активные элементы игнорируются в этом уравнении, потому что активные элементы должны быть ... хорошо активными. И поэтому они должны быть индивидуально ориентированы, чтобы пользователь мог взаимодействовать с ними.

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

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

Гипотетически, если мое предположение о том, что они используют «isImportantForAccessibility» в ячейках ListView, это способ, которым это реализовано (в отличие от некоторых магов TalkBack для ListViews), вы могли бы сканировать иерархию представления на макет ячейки после того, как она (так что Android Framework уже пошла с ним), а reset isImportantForAccessibility - нет. Хотя, я очень рекомендую против такого подхода, поскольку

A: Я не уверен, что это сработает, это просто гипотетично (нет, не собирается проверять его сам). Если логика для этого действительно находится на стороне TalkBack, вы действительно и действительно будете закрыты, если вы не хотите изобретать ListViews или писать собственный экранный ридер.

B: В общем, эти умные вещи, которые TalkBack пытается сделать доступными для справки, а не повредит. Если вы действительно не знаете доступность, лучше всего позволить Android сделать свое дело.

0

Я обнаружил, что если я устанавливаю textviews в textIsSelectable (true), Talkback распознает те textviews как элемент, который можно выбрать. Чтобы не изменять функциональность моего приложения, когда Talkback не активирован, я использовал AccessibilityManager, чтобы проверить, активирован ли Talkback.