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

[prg] Какое событие textView использует talkback,когда я нажимаю на ссылку,которую выбираю из списка ссылок в локальном контекстном меню talkback?

Всех приветствую. Есть один проект с открытым исходным кодом (quest
player fork),в котором textView содержат ссылки,но ничего не
происходит,когда я нажимаю на эти ссылки,хотя у зрячих всё нормально.
Разобравшись в коде я понял,что метод,вызывающийся при нажатии на
ссылку,срабатывает в событии onTouchEvent,которое определено в
классе,наследующимся от linkMovementMethod. Как я понимаю,в textView со
ссылками не обработано событие,которое использует talkback,когда я
выбираю ссылки из списка. Вопрос,какое это событие? Я предполагаю,что
это событие клика по ссылке в textView. Если я прав,подскажите
пожалуйста,как заставить textView использовать определённый алгоритм при
нажатии на ссылку,при этом очень нужно определять,какая ссылка была
нажата. В textView и linkMovementMethod я не нашёл соответствующих
интерфейсов,позволяющих делать это (под интерфейсом я подразумеваю,в том
числе,обработчики разных событий,которые очень часто называются
слушателями). Ссылки в textView,эта обработанная строка с
соответствующими html тегами. Сразу скажу,что класс linkiFy мне не
подойдёт,поскольку там уже автоматически определено поведение при клике
по ссылкам разных типов. Заранее благодарю всех за помощь.

Ответить   Fri, 1 Dec 2017 18:15:47 +0300 (#3533325)

 

Ответы:

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

TalkBack перехватывает события ввода (касания, жесты и нажатия клавиш).
Если перехваченные касание или жест используется самим TalkBack, то дальше
они не пройдут. Если не используются, то жест или касание перейдут к
активности на переднем плане (а точнее, к View в позиции касания, затем к
родительскому View и так далее вплоть до текущей активности, если где-то на
этом пути обработка события не будет завершена).
Так что сначала убедитесь, что касания пользователя при работающем TalkBack
вообще попадают в вашу активность.

Правильнее говорить о событии click, а не о событии "клик по ссылке". Куда
попадает событие click, зависит от нескольких обстоятельств. Во-первых,
представлена ли ссылка как самостоятельный элемент Ui (View) или это событие
сразу уходит к TextView.
В любом случае, это событие должно пройти через View.OnClickListener,
установленный для соответствующего элемента Ui. Во-вторых, ещё не факт, что
TalkBack вообще инициирует действие click у соответствующего
accessibility-объекта в TextView при выборе ссылки из списка.
Гораздо проще запросить у PackageManager активность для обработки выбранной
ссылки и вызвать эту активность при помощи startActivity. Если такой
активности в системе не зарегистрировано (то есть не установлено ни одного
пакета для активностей которого указан соответствующий intent-filter) , то и
startActivity не вызывается, а следовательно, с точки зрения пользователя,
ничего не происходит.
Так что придётся обратиться ещё и к исходникам TalkBack, чтобы понять, в
чём дело.

Успехов. Анатолий.

Ответить   "i_chay" Sun, 3 Dec 2017 14:42:54 +0300 (#3533675)

 

Здравствуйте Анатолий. Как раз я имею ввиду клик по ссылке,а не по
view,поскольку ссылки в данном проекте находятся в textView,а не как
отдельные view и,как я писал,в этом проекте метод,который отвечает за
работу со ссылками вызывается в onTouchEvent,которое находится в
классе,который наследуется от linkMovementMethod и который
устанавливается каждому view со ссылками с помощью метода textView
setLinkMovementMethod,при этом при нажатии на них они обрабатываются в
этой же activity. Может Вы меня не совсем правильно поняли,но я имею
ввиду какое событие делает talkback со ссылкой,когда я в локальном
контекстном меню в пункте ссылки делаю двойной таб по одному из
элементов списка со ссылками,которые содержатся в textView,на котором у
меня стоял фокус перед тем как я вызвал локальное контекстное меню
talkback? Заранее благодарю всех за помощь.

Ответить   Sun, 3 Dec 2017 15:30:02 +0300 (#3533700)