#android #accessibility #talkback
Вопрос:
Когда у меня есть представление переработчика с 12 элементами, например, когда фокус доступности переходит на ячейку № 3, talkback объявляет: «Дважды нажмите, чтобы активировать. Пункт 3 из 12».
Я хочу сохранить действие, но запретить ему объявлять позицию товара и количество товаров. Как я могу это сделать? Я попытался назначить делегата для представления переработчика, но не уверен, что переопределить в делегате.
Как я могу это сделать?
Ответ №1:
Эта функция не должна быть отключена: она позволяет людям, использующим Talkback, знать, что они находятся в списке, какова длина списка, какой элемент в данный момент сфокусирован (есть ли еще элементы выше/ниже).
Комментарии:
1. Его можно отключить, потому что иногда вы хотите реализовать свои собственные сообщения, которые сообщают пользователю, что они находятся в списке и что элементы каким-то образом уникальны, например, в таблице уникальных идентификаторов не нужно объявлять положение ячейки. Взгляните сюда: developer.android.com/guide/topics/ui/accessibility/. … Однако ваша точка зрения справедлива. Я просто говорю, что это должно быть и может быть отменено, см. Мой ответ 🙂
2. Убедитесь, что список по-прежнему можно прокручивать с помощью Talkback после этого изменения: установка значения «Информация о коллекции» на null удалит эти объявления, но также нарушит другое поведение, например, автоматическую прокрутку до элементов, которых нет на экране, когда пользователь достигает их.
3. В этом вы правы. Это, безусловно, препятствует другому поведению, связанному с коллекцией. Я исследовал это только в качестве эксперимента. Должен быть менее разрушительный подход. Возможно, некоторые свойства объекта CollectionInfo?
4. Я никогда не мог понять это, не нарушая другие функции :/
Ответ №2:
Так что я все понял. У AccessibilityNodeInfo есть вызываемый метод SetCollectionInfo()
. CollectionInfo имеет такие свойства, как rowCont и columnCount. Я просто установил информацию в нуль.
Обратите внимание, что ниже приведен xamarin:
private class TabLayoutTabAccessibilityDelegate: View.AccessibilityDelegate
{
public override void OnInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info)
{
base.OnInitializeAccessibilityNodeInfo(host, info);
info.SetCollectionInfo(null);
}
}
Комментарии:
1. Это не помогло
BottomNavigationView
. Прочитав мое собственное описание контента, он добавляет: «вкладка пример1 одна из четырех».