Активная ссылка URL-адреса Android в TextView - программирование

Активная ссылка 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. Теперь ссылка отображается правильно с синим цветом и подчеркиванием, но я нашел ее только мертвую ссылку. Ничего не происходит, если мы попытаемся щелкнуть его. Что мне нужно сделать, чтобы ссылка была активной?

4b9b3361

Ответ 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, а не для кликабельного текста в качестве ссылки.