Активная ссылка URL-адреса Android в TextView
Я получаю динамический текст из веб-службы и показываю то же самое в TextView. Иногда TextView имеет URL-адрес, например <a href="#" onclick="location.href='http://hello.com'; return false;">hello</a>
. Я установил текст, используя следующий код.
textView.setText(Html.fromHtml(sampletext));
А также установите android:autoLink="web"
в соответствующий xml, содержащий TextView
. Теперь ссылка отображается правильно с синим цветом и подчеркиванием, но я нашел ее только мертвую ссылку. Ничего не происходит, если мы попытаемся щелкнуть его. Что мне нужно сделать, чтобы ссылка была активной?
Ответы
Ответ 1
После пересмотра всех решений сводка с некоторыми пояснениями:
android:autoLink="web"
найдет URL-адрес и создаст ссылку, даже если андроид: linksClickable не установлен, ссылки по умолчанию доступны по клику. Вам не нужно сохранять один URL, даже в середине текста он будет обнаружен и доступен для клика.
<TextView
android:text="My web site: www.stackoverflow.com"
android:id="@+id/TextView1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:autoLink="web">
</TextView>
Чтобы установить ссылку через код, тот же принцип, нет необходимости в шаблоне или андроиде: autoLink в макете, ссылка найдена автоматически с помощью Linkify:
final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView);
myClickableUrl.setText("Click my web site: www.stackoverflow.com");
Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS);
Ответ 2
Это работает для меня:
<TextView
android:text="www.hello.com"
android:id="@+id/TextView01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:autoLink="web">
</TextView>
Ответ 3
Чтобы сохранить любое время, истинное решение
<TextView
android:text="www.hello.com"
android:id="@+id/TextView01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:autoLink="web"
android:linksClickable="true">
</TextView>
и я использую его, и он отлично работает
Ответ 4
Есть 2 случая:
- текст выглядит как
"click on http://www.hello.com"
вам просто нужно установить атрибут autoLink в xml, чтобы ссылка автоматически обнаруживалась в тексте:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="web"
android:text="click on http://www.hello.com"/>
- текст выглядит как
click on <a href="http://hello.com">hello</a>
то вам нужно сделать это по коду и сообщить, что текст html, и указать метод перемещения ссылки для клика:
String text = "click on <a href=\"http://hello.com\">hello</a>";
TextView textView = view.findViewById(R.id.textView);
textView.setText(Html.fromHtml(text));
textView.setMovementMethod(LinkMovementMethod.getInstance());
Ответ 5
Проверьте этот подход:
String text = "Visit stackoverflow.com";
TextView label = new TextView(this);
label.setText(text);
Pattern pattern = Pattern.compile("stackoverflow.com");
Linkify.addLinks(label, pattern, "http://");
Ответ 6
У меня есть идея, которую я нашел
TextView tv = ( TextView ) findViewById( R.id.link );
WebView wv = ( WebView ) findViewById( R.id.webView );
URLSpan[] urlSpans = tv.getUrls();
for ( URLSpan urlSpan : urlSpans )
{
wv.loadUrl( urlSpan.getURL() );
}
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Hello, Android</string>
<string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string>
</resources>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="all"
android:linksClickable="true"
android:text="@string/link" />
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0" />
</LinearLayout>
Ответ 7
В вашем XML вам нужно добавить android:linksClickable="true"
в TextView.
Ответ 8
Если вы отображаете в textview строку из strings.xml, строки, содержащие веб-ссылку, не должны иметь слова "a href=". Если эти слова будут удалены из файла strings.xml, ссылка будет работать.
Ответ 9
Добавьте эти строки кода в ваш textView
в xml
файле, он будет работать отлично.
android:autoLink="web" android:textColorLink="@android:color/holo_orange_dark" android:linksClickable="true"
или, если вам нужна ваша собственная ссылка в textview
добавьте эти строки кода в ваш Java файл
final SpannableString s = new SpannableString("https://play.google.com/store/apps/details?id=cn.wps.moffice_eng");
Linkify.addLinks(s, Linkify.ALL);
установите эту строку в вашем TextView
по функции
Textview.setText(s);
и не забудьте добавить эту строку
((TextView)findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
id будет вашим textview
id
Наслаждаться...
Ответ 10
Ответ правильный, НО не полный, потому что у меня в xml были некоторые свойства из других ответов, таких как autoLink и linksClickable, и программный способ не работал. Также, когда я передаю строку с html из строкового ресурса, это также не работает, так что будьте осторожны, вы должны очистить ваш xml и передать строку точно так же, как в этом ответе.
String text = "click on <a href=\"http://hello.com\">hello</a>";
TextView textView = view.findViewById(R.id.textView);
textView.setText(Html.fromHtml(text));
textView.setMovementMethod(LinkMovementMethod.getInstance());
Я не пробовал без LinkMovementMethod, но теперь я в порядке, так как он наконец работает. Другие ответы не помогли мне или были для видимого текста URL, а не для кликабельного текста в качестве ссылки.