[prg] Какое событие textView использует talkback,когда я нажимаю на ссылку,которую выбираю из списка ссылок в локальном контекстном меню talkback?
Всех приветствую. Есть один проект с открытым исходным кодом (quest
player fork),в котором textView содержат ссылки,но ничего не
происходит,когда я нажимаю на эти ссылки,хотя у зрячих всё нормально.
Разобравшись в коде я понял,что метод,вызывающийся при нажатии на
ссылку,срабатывает в событии onTouchEvent,которое определено в
классе,наследующимся от linkMovementMethod. Как я понимаю,в textView со
ссылками не обработано событие,которое использует talkback,когда я
выбираю ссылки из списка. Вопрос,какое это событие? Я предполагаю,что
это событие клика по ссылке в textView. Если я прав,подскажите
пожалуйста,как заставить textView использовать определённый алгоритм при
нажатии на ссылку,при этом очень нужно определять,какая ссылка была
нажата. В textView и linkMovementMethod я не нашёл соответствующих
интерфейсов,позволяющих делать это (под интерфейсом я подразумеваю,в том
числе,обработчики разных событий,которые очень часто называются
слушателями). Ссылки в textView,эта обработанная строка с
соответствующими html тегами. Сразу скажу,что класс linkiFy мне не
подойдёт,поскольку там уже автоматически определено поведение при клике
по ссылкам разных типов. Заранее благодарю всех за помощь.
Приветствую всех!
TalkBack перехватывает события ввода (касания, жесты и нажатия клавиш).
Если перехваченные касание или жест используется самим TalkBack, то дальше
они не пройдут. Если не используются, то жест или касание перейдут к
активности на переднем плане (а точнее, к View в позиции касания, затем к
родительскому View и так далее вплоть до текущей активности, если где-то на
этом пути обработка события не будет завершена).
Так что сначала убедитесь, что касания пользователя при работающем TalkBack
вообще попадают в вашу активность.
Правильнее говорить о событии click, а не о событии "клик по ссылке". Куда
попадает событие click, зависит от нескольких обстоятельств. Во-первых,
представлена ли ссылка как самостоятельный элемент Ui (View) или это событие
сразу уходит к TextView.
В любом случае, это событие должно пройти через View.OnClickListener,
установленный для соответствующего элемента Ui. Во-вторых, ещё не факт, что
TalkBack вообще инициирует действие click у соответствующего
accessibility-объекта в TextView при выборе ссылки из списка.
Гораздо проще запросить у PackageManager активность для обработки выбранной
ссылки и вызвать эту активность при помощи startActivity. Если такой
активности в системе не зарегистрировано (то есть не установлено ни одного
пакета для активностей которого указан соответствующий intent-filter) , то и
startActivity не вызывается, а следовательно, с точки зрения пользователя,
ничего не происходит.
Так что придётся обратиться ещё и к исходникам TalkBack, чтобы понять, в
чём дело.
Успехов. Анатолий.