Отправляет email-рассылки с помощью сервиса Sendsay

За 2019-05-26

[prg] Re[3]: Как реализовать перемещение по структурным частям view в talkback п

Приветствую всех!

Правильно. В принципе, все, что необходимо, изложено здесь:
https://developer.android.com/guide/topics/ui/accessibility/custom-views.html

На всякий случай напомню, что на поведение TalkBack влияют изменения двух
фокусов -- клавиатурного и доступности.
Физическое касание экрана приводит к тому, что фокус доступности
перемещается к View в точке касания, что порождает соответствующее
accessibility-событие, озвучиваемое TalkBack.
Тоже самое происходит с фокусом ввода, который перемещается в зависимости от
событий физического ввода, то есть от нажатий клавиш на клавиатуре и т.п.
Иными словами, пользователь в чистом виде не может сам управлять фокусом
доступности. Это делает либо непосредственно View, либо TalkBack,
интерпретируя клавиатурные или жестовые команды (например,
свайпы)соответствующим образом.
Схожий момент и с гранулярной навигацией по текстовому содержимому -- это
касается только TalkBack или других служб доступности.
SpannableString не работают с гранулярной навигацией по текстовому
содержимому. Они позволяют "связать" с определенным фрагментом текста ваш
объект и реализовать нужную логику, например, при касании этого фрагмента
текста. Предполагаемый вариант: по щелчку на соответствующем фрагменте ваш
View либо вызывает announceForAccessibility с нужным текстом, либо меняет
contentDescription (или и то, и другое одновременно).
Более детальные ответы на ваши вопросы требуют написания кода и,
соответственно, его проверки и т.п.
А это уже ваша работа.

Исходное сообщение > Правильно ли я понимаю,что
> для этого мне как раз нужно унаследоваться от класса view и
> переопределить там какой-то метод,или можно использовать текущий метод
> класса textview? Можно ли в этом случае скрывать вложенные
> accessibilityNodeInfo,ведь я хочу реализовать возможность,чтобы эти view
> и скрывались,т.е чтобы текст был снова в одном textview.

   "i_chay" 2019-05-26 18:19:13 (#3619587)

[prg] Re[2]: Как реализовать перемещение по структурным частям view в talkback п

Здравствуйте Анатолий. Огромное спасибо Вам за ответ. Вы писали
> Возможный вариант: реализовать для всех интересующих вас вложенных
> элементов, как минимум, AccessibilityNodeInfo,
Мне не понятно,как их вставлять внутрь view. Правильно ли я понимаю,что
для этого мне как раз нужно унаследоваться от класса view и
переопределить там какой-то метод,или можно использовать текущий метод
класса textview? Можно ли в этом случае скрывать вложенные
accessibilityNodeInfo,ведь я хочу реализовать возможность,чтобы эти view
и скрывались,т.е чтобы текст был снова в одном textview. Ещё Вы пишете
> Можно проще -- оформить их в виде вложенных
> View, тогда автоматически для них будет реализован системный вариант
> AccessibilityNodeInfo.
А вот этот вариант мне не нравится,поскольку тогда эти View увидят
зрячие,а им это для чтения формул не нужно. Можно,конечно,пошаманить с
цветами и другими свойствами View,чтобы они не были видны для зрячих,но
мне кажется всё же лучше и проще первый вариант. Только ещё вопрос,как
можно обрабатывать события клика на AccessibilityNodeInfo и узнать,по
какому именно accessibilityNodeInfo произошёл клик? Ещё Вы пишете
> и вам придется написать свой обработчик
> соответствующего события, чтобы скрыть его от TalkBack.
А вот это уже интересно,какие события мне нужно использовать,чтобы
скрыть view от talkback. Наверное Вы имеете ввиду класс
exploreByTouchhelper или отслеживание accessibilityEvent hover_enter и
hover_exit (типы событий могут быть написаны неточно). Есть ли примеры
реализации вложенных AccessibbilityNodeInfo и обработки ощупывания,чтобы
talkback не читал accessibilityNodeInfo/. Например,как реализовать
просто чтобы в TextView с текстом Мама мыла раму появлялись
accessibilityNodeInfo,доступные для talkback с текстами Мама,мыла,раму,а
если я кликну на accessibilityNodeInfo с текстом Мама - Дополнительно
Появлялись accessibilityNodeInfo с текстами М,а,м,а. При этом
AccessibilityNodeInfo более верхнего уровня должны скрываться,т.е Когда
я,к примеру,кликаю на accessibulityNodeInfo с текстом Мама,он должен
быть скрыт. Анологичная ситуация должна быть,к примеру при нажатии
кнопки назад,т.е если я к примеру нажму кнопку назад в
AccessibilityNodeInfo с текстом р,то это и остальные раскрытые
accessibilityNodeInfo,относящиеся к тексту раму,должны быть скрыты,а на
их месте должен появиться accessibilityNodeInfo с текстом раму. Пока я
писал всё это мне пришла мысль,что для решения моей проблемы наверно
придётся наследоваться от класса AccessibilityNodeInfo,чтобы отследить
событие accessibility_focused (тип события может быть написан
неправильно),чтобы понять,к примеру,по какому именно
AccessibilityNodeInfo я кликаю,или это можно сделать как-то по-другому?
Ещё Вы пишете
> (если его еще никто не написал)
Как я понял из своих тестов под android,talkback и accessibility of math
content живут на разных планетах,если вообще не на разных
вселенных,поэтому я и думаю разработать такое приложение,чтобы хоть
как-то улучшить ситуацию. Ещё Вы пишете
> Посмотреть в сторону SpannableString. Есть пример, но он касается кликов
> по отдельным словам
Когда я мучался с ссылками в qsp,я тоже находил похожие варианты,но
когда я попадал на символ,используя детализацию по символам,у меня мой
код не работал поскольку,как Вы сами писали,talkback не перемещается по
фрагментам текста в textview. Заранее огромное Вам спасибо за помощь.

   2019-05-26 15:56:43 (#3619582)

[prg] Re: Как реализовать перемещение по структурным частям view в talkback при

Приветствую всех!
Возможный вариант: реализовать для всех интересующих вас вложенных
элементов, как минимум, AccessibilityNodeInfo, если нужно, чтобы они стали
видимы для фокуса доступности. Можно проще -- оформить их в виде вложенных
View, тогда автоматически для них будет реализован системный вариант
AccessibilityNodeInfo. В любом случае, скорее всего, такие элементы будут
реагировать на ощупывание и вам придется написать свой обработчик
соответствующего события, чтобы скрыть его от TalkBack.

Возможные реализации (но, скорее всего, этим список вариантов не
ограничивается):
1. Написать свой полноценный MathView (если его еще никто не написал),
который будет содержать вложенные TextView с соответствующими частями
математических выражений. Тогда компоненты формулы будут доступны для
навигации TalkBack.
2. Посмотреть в сторону SpannableString. Есть пример, но он касается кликов
по отдельным словам в TextView
https://stackoverflow.com/questions/30349749/multiple-onclicklistener-on-each-word-of-string-in-text-view-android

Исходное сообщение Подскажите пожалуйста,можно
> ли реализовать и если да,то как,чтобы при попытке перейти на следующее
> или предыдущее view,я попадал бы на следующую или предыдущую часть
> структурной единицы view.

   "i_chay" 2019-05-26 13:22:18 (#3619576)

[prg] Как реализовать перемещение по структурным частям view в talkback при свай

Всех приветствую. Обычно,когда мы свайпаем влево или вправо,talkback
переходит на предыдущее или следующее view. Подскажите пожалуйста,можно
ли реализовать и если да,то как,чтобы при попытке перейти на следующее
или предыдущее view,я попадал бы на следующую или предыдущую часть
структурной единицы view. К примеру у меня в textView записана формула
a+b/c. Как мне реализовать поведение,чтобы когда фокус стоит на этом
view и я свайпаю вправо,talkback читал мне знаменатель,т.е c и чтобы
если я буду свайпать влево,talkback прочитал мне числитель a+b.
Естественно,где числитель и знаменатель и другие части в формуле,я буду
определять сам,просто мне нужна помощь в реализации этой идеи на уровне
android api,т.е как это реализовать,какое view мне лучше для этого
использовать - TextView или WebView и т.д. В общем я хочу реализовать
это так,как это делает mathjax и mathplayer с nvda,только с помощью того
же mathjax я могу перемещаться по структурным элементам формулы вроде
только стрелками,а я хочу реализовать эту возможность на сенсоре. Я
хотел посмотреть в сторону AccessibilityEvent,но когда я сделал тестовый
пример с onPopulateAccessibilityEvent,никакого события не
приходило,когда моё view теряло фокус. Конечно,можно использовать
onFocusChangeListener но тогда,наверное,если у пользователя включены
звуки talkback,он услышит звук перемещения фокуса на следующее view,а
потом он услышит этот же звук,поскольку фокус вернётся к текущему view.
В общем мне нужно как-то вклинится в процесс перед тем,как talkback
поймёт,что текущее view должно потерять фокус,при этом это должно
работать только при свайпах,а не в том случае,когда я нахожу другое view
ощупыванием экрана. Заранее всем огромное спасибо за помощь.

   2019-05-26 00:45:38 (#3619561)