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

За 2019-05-27

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

Здравствуйте Анатолий. Вы писали
> AccessibilityNodeInfo -- это не то же самое, что View.
Если честно,я раньше думал,что это почти одно и тоже,только классы у них
разные: View и AccessibilityNodeInfo. Ещё Вы пишете
> Ваш MathView должен содержать поле, которое хранит текущее состояние
> математической формулы(например, свернуто и развернуто)
Дело в том,что у меня идея заключается в том,чтобы реализовать
многоуровневую навигацию,как это сделано в mathjax,т.е можно сворачивать
и разворачивать части формулы,хотя для первого этапа Ваш вариант
подойдёт,но в дальнейшем мне всё равно придётся вернуться к
этому,поэтому для меня и важно знать,на каком узле в момент клика у меня
стоит фокус. Как я понял,я могу не наследоваться от класса
AccessibilityNodeProvider,поскольку мне нужно сворачивать структуру
только,к примеру,при нажатии кнопки назад,а разворачивать только при
клике на view,главное понять,как правильно получить
AccessibilityNodeInfo и установить его для view. Кстати всё же хотелось
бы уточнить,как более правильно возвращаться к предыдущему состоянию
узлов,т.е свернуть формулу или её часть. Ещё Вы пишете
> А как сейчас, вы в курсе?
Если честно нет,но хотелось бы узнать,как сейчас с этим обстоит
ситуация. Ещё Вы пишете
> Чтобы View стал способен получать клавиатурный фокус, используйте
Я имел ввиду,что по дереву узлов я смогу перемещаться не только на
сенсоре,но и на клавиатуре.

   2019-05-27 21:10:20 (#3619712)

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

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

Пару слов о виртуальной структуре, которую образуют AccessibilityNodeInfo.
Эта структура виртуальна, поскольку не представлена в GUI на экране, но
AccessibilityNodeInfo -- это не то же самое, что View.
У всех стандартных View есть реализация соответствующей структуры из
accessibility-узлов, поэтому, возможно, и возникает неверное представление,
что это одно и то же.

Если вы хотите добавить дочерний View, используйте ViewGroup.addView():
http://developer.alexanderklimov.ru/android/views/addview.php

Ваш MathView должен содержать поле, которое хранит текущее состояние
математической формулы(например, свернуто и развернуто) .
В зависимости от значения этого поля вы и формируете нужную структуру
accessibility-узлов.
Это поле меняет свое значение при щелчке и / или иных событиях, которые
приходят в ваш MathView.
Любой программируемый компонент в любом GUI -- это конечный автомат.

Использовать WebView, На мой взгляд, не очень удачная идея. Это большой и
самодостаточный компонент. Вряд ли вы сможете манипулировать его
содержимым. Кроме того, раньше WebView сам обеспечивал свою доступность при
помощи javascript.
А как сейчас, вы в курсе?

Чтобы View стал способен получать клавиатурный фокус, используйте
View.setFocusable().
И не смешивайте функционал своего кастомного View и службы доступности
(например, TalkBack).
Навигацию по AccessibilityNodeInfo осуществляет TalkBack и ваш View тут ни
при чем.
Ваш View должен реализовать дерево accessibility-узлов, соответствующее его
состоянию.
Свайпы TalkBack для вас, как разработчика кастомного View, вообще не
существуют.

Исходное сообщение возникает вопрос,как
> реализовать добавление view при клике по родительскому view,чтобы оно
> стало скрытым и на его месте появились дети,ведь в примере этот метод
> срабатывает,если система хочет получить от view
> AccessibilityNodeProvider,а мне нужно это сделать при клике по view или
[...]
меня документ с формулами
> будет в WebView,поскольку тогда незрячий пользователь сможет
> осуществлять структурную навигацию по документу,т.е навигацию по
> заголовкам,ссылкам и т.д).

[...]
>Кстати правильно ли я
> понял,что этот вариант,на котором я пока что остановился,поможет
> перемещаться по формуле не только с сенсора,но и с клавиатуры,ведь я по
> сути перемещаюсь по view,хоть они и виртуальны? Заранее благодарю Вас за

   "i_chay" 2019-05-27 20:29:24 (#3619709)

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

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

Я понял,как добавлять свои вертуальные view,поскольку это было написано
в документации и там было указание на пример,в котором ещё один класс
наследуется от AccessibilityNodeProvider. Теперь возникает вопрос,как
реализовать добавление view при клике по родительскому view,чтобы оно
стало скрытым и на его месте появились дети,ведь в примере этот метод
срабатывает,если система хочет получить от view
AccessibilityNodeProvider,а мне нужно это сделать при клике по view или
по его детям. Также возникает вопрос,как вернуться на предыдущий
уровень,если,к примеру,я нажму кнопку назад. Можно,конечно,получить
AccessibilityNodeInfo от того view,на котором у меня был
фокус,затем,получив родителя,удалить всех детей кроме того,на котором у
меня стоял фокус,после чего сделать этого ребёнка родителем,но я не
уверен,что это правильный подход. Ещё мне непонятно,как получить View
(заголовок,формулу,параграф,ссылку и любой тег) у WebView и заменить его
моим костомным view (просто скорее всего у меня документ с формулами
будет в WebView,поскольку тогда незрячий пользователь сможет
осуществлять структурную навигацию по документу,т.е навигацию по
заголовкам,ссылкам и т.д). Также я прочитал,что вроде я могу
использовать onTouchEvent или onDispatchMotionEvent (названия событий
написаны неточно),но ведь эти события вроде некорректно работают с
talkback и для того,чтобы получить все Action,включая Action_Up,нужно
использовать класс ExploreByTouchHelper,об этом писали здесь.
<https://groups.google.com/d/msg/eyes-free-dev/xnYdzcnhUIM/gj_GneRPBAAJ>Но
в статье,на которую Вы мне дали ссылку написано,что делегаты нужно
использовать вроде до android 4.0,а с android 4.0 нужно переопределять
методы класса view. Ещё Вы пишете

> например, при касании этого фрагмента
> текста.
Получается,что Вы предлагаете мне вернуться на тот вариант,который
изначально был сделан разработчиками quest player. они в
классе,унаследованном вроде от ScrollMovementMethod использовали событие
OntouchEvent,или похожее и определяли по координатам,на какую ссылку я
нажал,но для меня лично этим пользоваться было очень неудобно,и я очень
редко мог попадать на ссылки. К тому же при касании view talkback не
читает символа,который у меня под пальцами,а читает весь текст или
ContentDescription view,которого я касаюсь. А когда я мучился со
ссылками,не зная как сделать их доступными для нас,я вообще сломал и эту
возможность и только благодаря Вам я смог сделать ссылки в qsp
доступными для нас. Хотя я вроде видел TextView,в котором если
я,используя детализацию по символам,становлюсь на ссылку и кликаю на
неё,она открывается в клиенте,предназначенном для открытия ссылок такого
типа,но я не представляю,как это реализовать с exec ссылками в
qsp,поскольку сейчас можно открывать ссылки только используя угловые
жесты talkback и находя ссылку в списке ссылок,а вот если я кликаю ровно
на эту ссылку,то ничего не происходит. Вообще очень жаль,что вроде на
developer.android.com нету раздела или статьи,которая бы описывала,как
сделать ссылки кликабельными для незрячих и чтобы понять этот
секрет,нужно усердно читать исходники talkback. Поэтому Ваш пример с
ClickSpan показывает,как не нужно разрабатывать приложения,чтобы они
были полностью доступны для незрячих. Если я не прав,то поправьте меня
пожалуйста,просто единственный вариант,на мой взгляд,как кликать по
ClickSppan,это сделать виртуальную иерархию view. Кстати правильно ли я
понял,что этот вариант,на котором я пока что остановился,поможет
перемещаться по формуле не только с сенсора,но и с клавиатуры,ведь я по
сути перемещаюсь по view,хоть они и виртуальны? Заранее благодарю Вас за
помощь.

   2019-05-27 14:50:19 (#3619675)