Создание пользовательского действия над текстовой ссылкой

#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 или его создателям, но я просто благодарный пользователь.