#android #text #hyperlink #action
#Android #текст #гиперссылка #Экшен
Вопрос:
Это кажется довольно простым вопросом, но я не уверен, есть ли у него решение. Возможно ли установить пользовательское действие для текстовой ссылки (те синие тексты, которые подчеркнуты) внутри TextView? Другими словами, возможно ли, чтобы обработчик делал что-то для события типа onClick по ссылке?
Комментарии:
1. Вы говорите о HTML в WebView? Или TextView с автоматической ссылкой?
2. Извините, я говорю о TextView.
Ответ №1:
Вам нужно установить ссылку в тексте и использовать autoLink
атрибут для нее. В качестве ссылки будет использоваться выделенный текст. В противном случае единственный вариант — использовать OnClickListener
, как предложил Николас.
Вы можете посмотреть на autoLink
документ об атрибутах здесь: http://developer.android.com/reference/android/widget/TextView.html#attr_android:autoLink
Если ваш текст: «Вы найдете его по адресуhttp://www.example.com «, и вы устанавливаете android:autoLink="web"
, после чего ссылка будет выделена и после нажатия на нее запустится браузер.
Комментарии:
1. Ну, я собираюсь предположить, что нет никакого способа сделать что-то там, где вы нажимаете » example.com » и установите OnClickListener для этой ссылки, чтобы сделать что-то еще, что не является ссылкой на веб-страницу (возможно, выполнить всплывающее окно или открыть диалоговое окно).
2. @AeroDroid, насколько мне известно, не использует общедоступный API. Вы всегда можете посмотреть, как был реализован TextView, и сделать что-то другое в своем собственном пользовательском представлении.
Ответ №2:
Если вы работаете с EditText
или a TextView
, у них обоих есть метод setOnClickListener(), который вы могли бы переопределить.
Если вы работаете с WebView
и созданный контент принадлежит вам, вы можете использовать JavaScript для обработки переходов по ссылкам.
Если вы работаете с WebView
и просматриваемый вами контент не принадлежит вам, я не уверен, есть ли способ перехватить их, но вы все равно должны иметь возможность вызывать setOnClickListener() в WebView, поскольку setOnClickListener() определен в классе View. Я просто не уверен, как бы вы определили, была ли нажата ссылка в этом WebView…
Комментарии:
1. Ну, я не хочу, чтобы весь TextView был связан. Я хочу, чтобы фрагмент текста внутри TextView был ссылкой, и щелчок по этой ссылке запустит пользовательское действие. Например, если бы в TextView было «Нажмите ЗДЕСЬ для чего-то»., где «ЗДЕСЬ» является ссылкой, щелчок по этой ссылке открыл бы диалоговое окно.
2. Это все еще можно было бы сделать с помощью OnClickListener (), поскольку щелчок должен сообщать координаты его попадания. Конечно, для этого потребуется выполнить некоторые математические вычисления, чтобы определить, какое слово было выбрано…
Ответ №3:
Я тоже столкнулся с такой ситуацией, когда я autolink
настроил в TextViews автоматическую обработку URL-адресов в TextViews. Однако по умолчанию веб-страница открывается во внешнем браузере, так как же нам заставить ее открыться во встроенном браузере (например)?
По сути, это обрабатывается для TextView с помощью LinkMovementMethod. Следовательно, предложение (в одном из ответов) настроить OnClickListener() TextView не идеально, поскольку это потребовало бы переопределения большей части того, что обрабатывает LinkMovementMethod, чтобы он мог точно обрабатывать клики / нажатия на то, что идентифицируется как URL.
Совсем недавно (спустя годы после публикации этого поста) кто-то предложил усовершенствование LinkMovementMethod, известное как (что еще?) Метод улучшения LinkMovementMethod, более подробно описанный в этом сообщении в блоге. Я могу подтвердить, что у меня это сработало. Всего за несколько строк изменений в коде TextView autolinks
теперь открывается в браузере приложения (и, очевидно, все виды другого поведения могут быть настроены по желанию). Я не имею никакого отношения к BetterLinkMovementMethod или его создателям, но я просто благодарный пользователь.