[prg] Re[3]: Как перехватывать обработку нажатия на ссылки с talkback?
Приветствую всех.
> Подскажите мне пожалуйста все варианты обработки клика по ссылкам,даже
> если они не подходят для моей ситуации,учитывая,что это html текст в
> textView и что talkback распознаёт эти ссылки.
Клик всегда обрабатывается в обработчике onClick того View, по которому этот
клик осуществлен.
TalkBack перехватывает сенсорный и клавиатурный ввод и может сам выполнять
какие-то специфические действия (которые его разработчики считают
необходимыми) и тогда этот клик может не попасть в целевой View.
Так что для полного понимания происходящего вам необходимо исследовать
исходники TalkBack.
В итоге ситуация распадается на два варианта: клик обработан в TalkBack
(если он активен), либо в View (если у него есть обработчик onClick
дефолтный или ваш).
Поскольку оба варианта имеют доступ к текстовому содержимому, то выделить
ссылку в позиции курсора не будет сложной задачей (при помощи регулярных
выражений или иным способом). Затем полученная ссылка отправляется системе
при помощи intent с значением action равным VIEW, а уже сама система
подбирает подходящее приложение из тех, в манифесте которых указан
intent-filter для конкретного типа url.
В чистой системе, кроме браузера, на http-ссылки ничего не зарегистрировано,
поэтому сразу стартует браузер. Если будут другие кандидаты, то система
предложит пользователю список приложений для работы с такими ссылками.
Например, чтобы ваша активность появлялась в списке приложений для открытия
http-ссылок, добавьте к активности вашего приложения intent-filter примерно
такого вида:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"
/>
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
Другой вариант (который правильнее назвать "костыль") -- это
трансформировать внешний вид ссылок так, чтобы TalkBack не распознавал в них
url (опять же для успеха необходимо уточнить способ, каким TalkBack
распознает url в обычном тексте).
Есть класс Linkify, который используется для выделения ссылок в TextView, но
помимо этого он позволяет изменить их внешний вид.
http://developer.alexanderklimov.ru/android/theory/linkify.php
Это позволит избежать вмешательства со стороны TalkBack и реализовать ваш
собственный обработчик для щелчка.
Успехов. Анатолий.