Android активная ссылка URL в TextView - PullRequest
54 голосов
/ 02 августа 2011

Я получаю динамический текст из веб-службы и показываю его в TextView.Иногда TextView имеет URL-адрес типа <a href="http://hello.com">hello</a>.Я установил текст, используя следующий код:

textView.setText(Html.fromHtml(sampletext));

А также установил android:autoLink="web" в соответствующем XML-файле, содержащем TextView.Теперь ссылка отображается правильно с синим цветом и подчеркиванием, но я нашел ее просто мертвой ссылкой.Ничего не происходит, если мы пытаемся нажать на него.Что мне нужно сделать, чтобы сделать ссылку активной?

Ответы [ 10 ]

137 голосов
/ 09 июля 2013

После пересмотра всех решений, резюме с некоторыми пояснениями:

android:autoLink="web" 

найдет URL и создаст ссылку, даже если android: 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>

Чтобы установить ссылку с помощью кода, тот же принцип, нет необходимости в шаблоне или Android: автоссылка в макете, ссылка найдена автоматически с помощью Linkify:

  final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView);
  myClickableUrl.setText("Click my web site: www.stackoverflow.com");
  Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS);
36 голосов
/ 02 августа 2011

Это работает для меня:

<TextView
    android:text="www.hello.com"
    android:id="@+id/TextView01"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:autoLink="web">
</TextView>
14 голосов
/ 04 ноября 2012

Чтобы сохранить в любое время, истинное решение -

    <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>

, и я использую его, и он прекрасно работает

6 голосов
/ 10 декабря 2017

Есть 2 случая:

тогда вам просто нужно установить атрибут 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 голосов
/ 02 августа 2011

Проверьте этот подход:

String text = "Visit stackoverflow.com";
TextView label = new TextView(this);
label.setText(text);
Pattern pattern = Pattern.compile("stackoverflow.com");
Linkify.addLinks(label, pattern, "http://");
3 голосов
/ 02 августа 2011

У меня есть идея, которую я нашел

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>  
2 голосов
/ 02 августа 2011

В вашем XML вам нужно добавить android:linksClickable="true" в TextView.

0 голосов
/ 05 июня 2019

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

0 голосов
/ 25 апреля 2019

Добавьте эти строки кода к вашему 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);

установите эту 's' строку в вашей TextView функцией

Textview.setText(s);

и не забудьте добавить эту строку

 ((TextView)findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());

id будет вашим textview id

Наслаждайтесь ...

0 голосов
/ 03 января 2019

Если вы отображаете в textview строку из strings.xml, строки, содержащие веб-ссылку, не должны иметь слова "a href =". Если эти слова будут удалены из файла strings.xml, ссылка будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...