У меня есть TextView, который отображает базовый HTML, содержащий 2+ ссылки. Мне нужно фиксировать клики по ссылкам и открывать ссылки - в моем собственном внутреннем WebView (не в браузере по умолчанию).
Наиболее распространенный метод обработки ссылок выглядит следующим образом:
String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>";
text_view.setLinksClickable(true);
text_view.setMovementMethod(LinkMovementMethod.getInstance());
text_view.setText( Html.fromHtml( str_links ) );
Однако в результате ссылки открываются во внутреннем веб-браузере по умолчанию (отображается диалоговое окно «Завершить действие с помощью ...»).
Я попытался реализовать onClickListener, который правильно срабатывает при нажатии ссылки, но я не знаю, как определить, КАКАЯ ссылка была нажата ...
text_view.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// what now...?
}
});
В качестве альтернативы я попытался создать собственный класс LinkMovementMethod и реализовать onTouchEvent ...
public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
String url = text.toString();
// this doesn't work because the text is not necessarily a URL, or even a single link...
// eg, I don't know how to extract the clicked link from the greater paragraph of text
return false;
}
Идеи?
Пример решения
Я придумал решение, которое анализирует ссылки из строки HTML и делает их интерактивными, а затем позволяет вам отвечать на URL-адрес.
span.getURL()
».) Вы даже можете опубликовать его как ответ, так как он лучше, чем принятый в настоящее время ответ!Ответы:
Основываясь на другом ответе , вот функция setTextViewHTML (), которая анализирует ссылки из строки HTML и делает их интерактивными, а затем позволяет вам отвечать на URL-адрес.
источник
ListView
с , когдаView
«sfocusable
установлено верно. Обычно это происходит сButton
s /ImageButton
s. Попробуйте позвонитьsetFocusable(false)
по вашемуTextView
.text.setMovementMethod(LinkMovementMethod.getInstance());
если не используете URLSpanВы сделали следующее:
вы пробовали в обратном порядке, как показано ниже?
и без:
источник
Это можно просто решить с помощью Spannable String. Что вы действительно хотите сделать (бизнес-требования), мне немного непонятно, поэтому следующий код не даст точного ответа на вашу ситуацию, но я мало уверен, что он даст вам некоторое представление и вы сможете решить свою проблему на основе следующего кода.
По мере того, как вы это делаете, я также получаю некоторые данные через HTTP-ответ, и я добавил дополнительный подчеркнутый текст в моем случае «еще», и этот подчеркнутый текст откроет веб-браузер при событии щелчка. Надеюсь, это поможет вам.
источник
У меня была та же проблема, но много текста смешано с несколькими ссылками и электронными письмами. Я думаю, что использование autoLink - более простой и понятный способ сделать это:
Вы можете установить Linkify.EMAIL_ADDRESSES или Linkify.WEB_URLS, если есть только один из них, который вы хотите использовать или установить из макета XML.
Доступные варианты: нет, Интернет, электронная почта, телефон, карта, все
источник
Решение
Я реализовал небольшой класс, с помощью которого вы можете обрабатывать длительные щелчки по самому TextView и нажатие на ссылки в TextView.
раскладка
TextViewClickMovement.java
использование
Ссылки
Надеюсь, это хелоп! Вы можете найти код здесь .
источник
text_view.setMovementMethod(new TextViewClickMovement(this, context));
; Android Studio жалуется, чтоcontext
решить проблему не удалось.Более чистое и лучшее решение с использованием собственной библиотеки Linkify .
Пример:
источник
Я сделал простую функцию расширения в Kotlin, чтобы улавливать щелчки URL-ссылок в TextView, применив новый обратный вызов к элементам URLSpan.
strings.xml (пример ссылки в тексте)
Перед вызовом handleUrlClicks убедитесь, что ваш составной текст установлен в TextView.
Это функция расширения:
Вот как я это называю:
источник
Если вы используете Kotlin, я написал простое расширение для этого случая:
Использование:
источник
Альтернативный, имхо более простой подход (для ленивых разработчиков вроде меня;)
При необходимости вы также можете проверить схему / mimetype намерения
источник
Я использую только textView и устанавливаю диапазон для URL-адреса и обрабатываю щелчок.
Я нашел здесь очень элегантное решение, без ссылки - в соответствии с этим я знаю, какую часть строки я хочу связать
обрабатывать ссылку текстового просмотра в моем приложении для Android
в котлине:
и использование: linkify (yourTextView, urlString, context)
источник