как сделать ссылку с кликом по URL в String.xml Textview на Android? [Дубликат]

Если элемент script имеет атрибут src , содержимое должно игнорироваться, любое другое поведение является несоответствующим.

предлагаемый в блогах (как взломать) для размещения контента в элементе, зная, что он не будет оцениваться, затем используйте методы DOM, чтобы получить содержимое в виде строки, и либо eval , либо вставить его в новый элемент сценария. Ни одна из них не является хорошей идеей.

826
задан Hamid Shatu 5 May 2014 в 06:50
поделиться

30 ответов

Погруженный в демонстрации API, я нашел решение своей проблемы:

Link.java:

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

Я удалил большинство атрибутов в моем TextView, чтобы соответствовать тому, что было в демо.

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

Это разрешило это. Очень трудно разобрать и исправить.

Важно: Не забудьте удалить autoLink="web", если вы вызываете setMovementMethod().

1096
ответ дан Tamás Sengel 15 August 2018 в 21:06
поделиться
  • 1
    Может быть, это только я, но зачем вам это делать с помощью EditText? – Justin 8 May 2012 в 19:41
  • 2
    Можно ли захватить клик и обработать его самостоятельно? Например. загрузить фрагмент. – qix 9 November 2013 в 15:22
  • 3
    Так же, как commment, я видел некоторые Samsung Galaxy S3 с ОС 4.3, которые сбой, когда "setMovementMethod (LinkMovementMethod.getInstance ()) & quot; , поэтому просто учтите это, мне пришлось создать проверку, прежде чем добавлять ее – Jorge Aguilar 25 March 2014 в 20:24
  • 4
    Тоже самое. Обратите внимание, что если вызывается setMovementMethod (), необходимо удалить autolink = "web" в файле XML, иначе ссылка не будет работать. Спасибо за комментарий – voghDev 5 May 2014 в 11:04
  • 5
    Просто используйте «autoLink». атрибут в вашем xml, например: android: autoLink = & quot; web & quot; – Kalpesh 22 May 2015 в 05:48

Я добавил эту строку в TextView: android:autoLink="web" Ниже приведен пример использования в файле макета.

layout.xml sample

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtDefaultpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
41
ответ дан 4 revs, 4 users 88% 15 August 2018 в 21:06
поделиться

Мой код был таким:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/link"
    android:text="@string/forgot"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:linksClickable="true"/>

Мой код Java был примерно таким:

/*TextView action*/
        TextView textView = (TextView) findViewById(R.id.link);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this,forgot.class));
            }
        });  

Это просто указывает ссылку на другое действие. Но эта ссылка доступна клиенту и работает плавно. Протестировано в Android Studio 1.5 (Preview)

1
ответ дан Ajay Kulkarni 15 August 2018 в 21:06
поделиться

Добавить CDATA в свой ресурс строки

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>
4
ответ дан Akexorcist 15 August 2018 в 21:06
поделиться

Я заметил, что использование android:autoLink="web", таким образом

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

, работало нормально для URL-адресов, но поскольку у меня был адрес электронной почты и номер телефона, который я хотел бы также связать, я в конечном итоге использовал это line android:autoLink="all", подобный этому

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

, и он работал как шарм.

12
ответ дан aLearner 15 August 2018 в 21:06
поделиться

Вам нужно только это:

android:autoLink="web"

Вставьте эту строку в TextView, которую можно кликать по ссылке в Интернете. URL-адрес, заданный как текст этого TextView.

Пример:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />
8
ответ дан Androdos 15 August 2018 в 21:06
поделиться

Надеюсь, это вам поможет,

String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
    TextView text = (TextView) findViewById(R.id.text);


    text.setText(Html.fromHtml(value));
    text.setMovementMethod(LinkMovementMethod.getInstance());
23
ответ дан Bebin T.N 15 August 2018 в 21:06
поделиться
  • 1
    Это отлично работает. Также убедитесь, что вы удалите android:autoLink=? из своего TextView. – sulai 17 October 2013 в 14:44
  • 2
    Это то, что окончательно сработало для меня. Valid HTML и не использовать android:autoLink=? важно! – Thorinside 23 October 2013 в 23:55
  • 3
    Для Xamarin это слово отображается, но не подчеркнуто и не может быть нажато с использованием вышеуказанных и НЕ этих параметров: autoLink, linksClickable – maxweber 1 November 2013 в 17:35
  • 4
    Для настройки Xamarin и установки текста или установки TextFormatted также выводится слово, но оно не зависит от клика, а не от синего / подчеркнутого. Удаление автозагрузки также не выполняется. Также исключается удаление только ссылокClickable. Удаление обоих также не выполняется. – maxweber 1 November 2013 в 17:37
  • 5
    helloWorld.TextFormatted = Html.FromHtml (linkURL); с и без них также терпит неудачу. (не связанный, а не синий) нельзя щелкнуть) – maxweber 1 November 2013 в 17:49

[Tested in Pre-lollipop as well as in Lollipop and above]

Вы можете получить строку HTML из бэкэнд или из ваших файлов ресурсов. Если вы поместите свой текст в качестве строки ресурса, обязательно добавьте тег CDATA:

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

Затем в коде вам нужно получить строку и назначить ее как HTML и установить метод перемещения ссылок :

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}
1
ответ дан Benny 15 August 2018 в 21:06
поделиться

Только то, что вам нужно добавить в текстовое представление в xml

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>
22
ответ дан Code-Apprentice 15 August 2018 в 21:06
поделиться

Вышеупомянутые решения не сработали для меня, но следующее (и кажется немного чище). Во-первых, в строковом ресурсе определите свой шедевр открытия тегов с использованием кодирования сущности HTML, то есть:

&lt;a href="http://www.google.com">Google&lt;/a>

и NOT:

<a href="http://www.google.com">Google</a>

В общем, закодируйте все шевроны в такой строке. BTW, ссылка должна начинаться с http://

Затем (как предложено здесь ) установите эту опцию в TextView:

 android:linksClickable="true"

Наконец, в code, do:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

Вот и все, никаких регулярных выражений или других ручных хаков.

84
ответ дан Community 15 August 2018 в 21:06
поделиться
  • 1
    Это создаст HTML-парсер каждый раз, когда этот код будет выполнен. Имейте это в виду, если вы используете это для создания ссылок внутри элемента списка или в других важных для производительности местах вашего приложения. Во время создания списка это увеличивает время выполнения моих методов getView с 50% – Janusz 12 April 2012 в 16:04
  • 2
    Не работает для меня. – Pratik Butani 28 January 2014 в 12:26
  • 3
    Также обратите внимание, что пробелы в URL-адресе должны быть заменены на %20 – Nicolas Tyler 26 June 2014 в 14:19
  • 4
    Вы можете избежать проблем с кодировкой объектов, обернув свою строку в тег <![CDATA[ ... ]]>. – Paul Lammertsma 15 September 2014 в 14:37
  • 5
    РАБОТАЕТ для меня, спасибо. Не работает с тегом <![CDATA[...]]>. – ricky.tribbia 19 October 2015 в 09:12

с помощью linkify : Linkify возьмите кусок текста и регулярное выражение и превратите все совпадения регулярных выражений в тексте в интерактивные ссылки

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);

Do not забудьте

import android.widget.TextView;
13
ответ дан DeathRs 15 August 2018 в 21:06
поделиться

Не знаю, стоит ли добавить еще один ответ, но на всякий случай ...

Мне пришлось выслеживать это в нескольких местах, но, наконец, эта версия кода работает.

strings.xml:

<string name="name1">&lt;a href="http://www.google.com">link text1&lt;/a></string>
<string name="name2">&lt;a href="http://www.google.com">link text2&lt;/a></string>

myactivity.xml:

<TextView 
    android:id="@+id/textview1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

<TextView 
    android:id="@+id/textview2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

myactivty.java (in onCreate ()):

TextView tv1 = (TextView)findViewById(R.id.textview1);
TextView tv2 = (TextView)findViewById(R.id.textview2);

tv1.setText(Html.fromHtml(getResources().getString(R.string.name1)));
tv2.setText(Html.fromHtml(getResources().getString(R.string.name2)));
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setMovementMethod(LinkMovementMethod.getInstance());

Это создаст две интерактивные гиперссылки с текстом link text1 и link text2, которые перенаправляют пользователя на google.

3
ответ дан degausser 15 August 2018 в 21:06
поделиться

Следующее должно работать для всех, кто ищет комбинацию текста и гиперссылки в приложении для Android.

В string.xml:

<string name="applink">Looking for the regular Zesteve App? 
<a href="https://play.google.com/store/apps/details?id=zesteve.com.myapplication">Get it here</a>
</string>

Теперь вы можете использовать это string в любом данном View, как это:

<TextView
    android:id="@+id/getapp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="@color/main_color_grey_600"
    android:textSize="15sp"
    android:text="@string/applink"/>

Теперь, в вашей деятельности или фрагменте, сделайте следующее:

TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());

К настоящему времени вы не 't требуется установить android:autoLink="web" или android:linksClickable="true" с помощью этого подхода.

Надеюсь, вы найдете это полезным.

8
ответ дан Demitrian 15 August 2018 в 21:06
поделиться

Вот как я решил использовать интерактивные и видимые ссылки в TextView (по коду)

private void setAsLink(TextView view, String url){
        Pattern pattern = Pattern.compile(url);
        Linkify.addLinks(view, pattern, "http://");
        view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
    }
7
ответ дан Dominic Bartl 15 August 2018 в 21:06
поделиться
  • 1
    но я бы хотел увидеть текст и при нажатии на текст он перенаправляется на ссылку (открытую браузером)? Это решение не решает это, не так ли? – Silentbang 12 December 2012 в 15:06
  • 2
    Да, он открывает браузер. – Dominic Bartl 14 December 2012 в 14:21

Я использовал это просто

Linkify.addLinks(TextView, Linkify.ALL);

делает ссылки кликабельными, заданные здесь

57
ответ дан jai_b 15 August 2018 в 21:06
поделиться
  • 1
    Этот ответ лучший. Работает на каждой версии Android, и нам просто нужно добавить этот метод, когда текст установлен в TextView. Бонус: он позволяет добавлять настраиваемые ссылки, доступные для клика – Kerwan 5 December 2014 в 17:56
  • 2
    Действительно самый простой и лучший ответ. он работает для электронной почты / Интернета в то же время .... спасибо человеку !!! – Imran Ahmed 5 June 2015 в 08:42
  • 3
    Используйте LinkifyCompat, если вам нужны некоторые из новых расширенных функций – Vaiden 7 January 2018 в 00:10
  • 4
    Хорошо, он делает URL-адреса без <a href... кликабельными – Pavel 28 May 2018 в 14:59
  • 5
    Он также делает все "html" теги внутри работают соответственно, например. & Л; б & GT; ... & л; / б & GT; и т.п. – Array 10 August 2018 в 12:52

Ричард, в следующий раз вы должны добавить этот код в TextView вместо XML.

android:autoLink="all"

Это должно быть так.

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/txtCredits"
    android:id="@+id/infoTxtCredits"
    android:autoLink="all"
    android:linksClickable="true">
</TextView>

t нужно использовать этот код (t2.setMovementMethod(LinkMovementMethod.getInstance());), чтобы сделать ссылку доступной.

Также, это правда: до тех пор, пока вы установите autoLink и linksClickable , не забудьте добавить это в файл String.xml, чтобы ссылка на клики работала.

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
18
ответ дан Jakar 15 August 2018 в 21:06
поделиться
  • 1
    Не работает для меня. Ссылка действительно доступна, но отображается вся строка, а не только «Google». Фактически, ни один из ответов здесь или их комбинация пока не работает. – Violet Giraffe 5 August 2013 в 10:12
  • 2
    Включено ли ваше устройство или интернет-эмулятор и установлено ли оно ON (Wi-Fi) или подключено к локальной сети, @ Violet Giraffe? – David Dimalanta 14 November 2013 в 08:50
  • 3
    Это. Мне никогда не удавалось сделать ссылки кликабельными, используя только атрибуты XML, для этого пришлось прибегнуть к Java-коду. Это неважно, но не приятно. – Violet Giraffe 14 November 2013 в 11:38

Я использую только android:autoLink="web", и он работает нормально. Щелчок по ссылке открывает браузер и показывает правильную страницу.

Единственное, что я мог догадаться, это то, что какое-то другое представление находится над ссылкой. Что-то прозрачное заполняет весь родитель, но не отображает ничего выше ссылки. В этом случае клик переходит к этому представлению вместо ссылки.

461
ответ дан Janusz 15 August 2018 в 21:06
поделиться
  • 1
    Добавлено больше информации выше. Может ли это быть способ, которым я определяю строку как & lt; string name = & quot; txtCredits & quot; & gt; & lt; a href = " google.com" & gt; Google & lt; / a & lt; / string & gt; / / g0 ] ;? Похоже, это разрешено, но это не работает для меня. – Richard 29 April 2010 в 23:46
  • 2
    если вы используете привязку auto, вам не нужна часть href. ОС возьмет строку, анализируя ее для URL-адресов и преобразует каждый URL-адрес в ссылку с возможностью клика. Но это не приведет к тому, что слово google будет связано с google.com. Он отобразит www.google.com как ссылку. – Janusz 30 April 2010 в 07:37
  • 3
    использование autolink отлично подходит для меня, просто текстовое представление без родителя вообще. – euther 5 December 2011 в 02:52
  • 4
    android: autoLink также отлично подходит для связывания телефонных номеров, адресов и адресов электронной почты (или всего выше). – CloudyMusic 23 March 2012 в 22:38
  • 5
    Нет, это не так, потому что этот ответ не работает, если вы не используете тег привязки с текстовым текстом, отличным от URL-адреса – cprcrack 25 January 2014 в 20:38

Причина, по которой у вас возникла проблема, заключается в том, что она только пытается сопоставить «голые» адреса. http://www.google.com/ http://www.google.com ".

Запуск текста через Html.fromHtml () должен сделать трюк. Вы должны сделать это программно, но он работает.

5
ответ дан Jeremy Logan 15 August 2018 в 21:06
поделиться
  • 1
    Ссылки в TextView отличаются от другого текста в строке, поэтому я считаю, что они распознаются как ссылки. Они просто не доступны для просмотра :-( – Richard 30 April 2010 в 18:49

Потратив некоторое время на это, я обнаружил, что:

  • android:autoLink="web" работает, если у вас есть полные ссылки в вашем HTML. Следующее будет выделено синим и кликабельным:
  • Некоторые тексты <a href="http://www.google.com">http://www.google.com</a>
  • Некоторые тексты http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); будет работать со следующим (будет выделен и доступен кликабель):
  • Некоторые тексты <a href="http://www.google.com">http://www.google.com</a>
  • Некоторые тексты http://www.google.com
  • Некоторые тексты <a href="http://www.google.com">Go to Google</a>

Обратите внимание, что третий вариант имеет гиперссылку, но описание ссылки (сама часть между тегами) не является ссылкой. android:autoLink="web" НЕ работает с такими ссылками.

  • android:autoLink="web", если задано в XML, переопределит view.setMovementMethod(LinkMovementMethod.getInstance()); (т. е. ссылки третьего вида будут выделены, но не будут доступны для кликов).

Мораль этой истории - использование view.setMovementMethod(LinkMovementMethod.getInstance()); в вашем коде и убедитесь, что у вас нет android:autoLink="web" в вашем XML-макете, если вы хотите всех ссылок для кликабельности.

299
ответ дан Jeshurun 15 August 2018 в 21:06
поделиться
  • 1
    setMovementMethod не работает со вторым вариантом, который вы упомянули, т.е. google.com .. какое-либо обновление? – Darpan 13 March 2015 в 11:33
  • 2
    Это правильный ответ – Plugie 20 June 2015 в 04:36
  • 3
    Благодарим за то, что <a href="http://www.google.com">Go to Google</a> не работает для autoLink. Для так много ответов на SO, это единственный, кто упомянул об этом. Спасибо! – cwhsu 29 December 2016 в 10:23

Если вы используете XML TextView для вашего требования, вам нужно сделать всего две вещи:

  1. Определите свою ссылку в строке, например «это мой веб-сайт». Вы можете добавить его в xml или в код.
  2. В xml, который имеет TextView, добавьте следующее:

android:linksClickable="true"

android:autoLink="web"
3
ответ дан Jon Lin 15 August 2018 в 21:06
поделиться

Принимаемый ответ правильный, НО это будет означать, что номера телефонов, карты, адреса электронной почты и регулярные ссылки, например. http://google.com без href-тегов НЕ ДОЛЖЕН быть кликабельным, поскольку вы не можете иметь автолинк в xml.

Единственное полное решение для ВСЕХ щелчков, которое я нашел, следующее:

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

И TextView не должен иметь android:autolink. Также нет необходимости в android:linksClickable="true"; это по умолчанию.

8
ответ дан Kelly McKinnon 15 August 2018 в 21:06
поделиться
  • 1
    для меня это сработало без этого, принятый ответ работал отлично @Kelly, можете ли вы рассказать версию и устройство Android, на которых у вас возникла проблема? – Akhil Dad 17 May 2016 в 12:44

Просто потратил столько времени, чтобы понять, что вам нужно использовать getText (R.string.whatever) вместо getString (R.string.whatever) ...

В любом случае, вот как я получил шахтная работа. С несколькими гиперссылками в том же текстовом представлении тоже.

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

пример строки

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>
1
ответ дан luca992 15 August 2018 в 21:06
поделиться

Я использую автолинк для «авто подчеркивания» текста, но просто сделал «onClick», который управляет им. (Я сам столкнулся с этой проблемой)

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:textSize="18dp"
            android:autoLink="all"
            android:text="@string/twitter"
            android:onClick="twitter"/>

public void twitter (View view)
    {
        try
        {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
            startActivity(browserIntent);

        }
        finally
        {
        }
    }

Не требует никаких разрешений, поскольку вы передаете намерение приложениям, которые управляют этими ресурсами (браузер IE).

Это было для меня. Удачи.

3
ответ дан onaclov2000 15 August 2018 в 21:06
поделиться
  • 1
    Вы не создаете ссылку, которая доступна кликабельно, вы просто ставите весь текст в текстовое поле ... Это не вопрос. – clauziere 28 January 2016 в 18:28
  • 2
    Согласованный, но иногда обходной путь, который работает, - это одно и то же. Очевидно, через 5 лет после того, как был написан самый популярный ответ, это все еще проблема, и в течение 6 месяцев у меня была такая же проблема, но в итоге было другое, но рабочее решение. – onaclov2000 29 January 2016 в 13:53

Используйте код ниже:

String html = "<a href=\"http://yourdomain.com\">Your Domain Name</a>"
TextView textview = (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(Html.fromHtml(html));
6
ответ дан Phuc Tran 15 August 2018 в 21:06
поделиться

Не используйте setAutoLinkMask(Linkify.ALL) при использовании setMovementMethod(LinkMovementMethod.getInstance()) и Html.fromHTML() для правильно отформатированных HTML ссылок (например, <a href="http://www.google.com/">Google</a>).

11
ответ дан Piyush 15 August 2018 в 21:06
поделиться

Самое легкое, что сработало для меня, - использовать Linkify

TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);

, и он автоматически обнаружит URL-адреса веб-текста в текстовом виде.

14
ответ дан pks 15 August 2018 в 21:06
поделиться

Вот очень один код андроида, чтобы сделать выбор телефона и url из textView независимо от того, что такое строка и каковы данные. Для этого вам не нужно использовать HTML-теги.

TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com ");

// Makes the textView's Phone and URL (hyperlink) select and go.
Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
11
ответ дан Rahul Raina 15 August 2018 в 21:06
поделиться

Используйте это ...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

и добавьте разрешение в файл манифеста

<uses-permission android:name="android.permission.INTERNET"/>
8
ответ дан Tej 15 August 2018 в 21:06
поделиться
  • 1
    Это будет работать, но имейте в виду, что приложение может не нуждаться в доступе к Интернету за пределами этого интерактивного TextView. Может быть, избыток в этих случаях – Jose_GD 22 February 2013 в 17:26
  • 2
    Действительно ли это связано с вопросом? – Darpan 13 March 2015 в 10:36
  • 3
    Это не касалось вопроса. – afollestad 15 April 2015 в 02:40
  • 4
    Это никогда не подведет! – Skynet 2 July 2015 в 05:32
  • 5
    Мне нравится этот метод, поскольку он позволяет нам иметь только текст привязки, а не полный URL. Текст привязки также может быть оформлен, например, цветным зеленым и подчеркнутым. – lost baby 1 November 2017 в 00:01

Телефон Autolink не работает для меня. Следующее работало как прелесть,

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";        
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());
4
ответ дан user1995307 15 August 2018 в 21:06
поделиться

Если вы хотите добавить ссылку на HTML-код, все, что вам нужно сделать, это:

  • добавить ресурс HTML-подобной строки:
     <string name="link"><a href="https://www.google.pl/">Google</a></string>
    
  • добавить свой просмотрите макет с NO-специфической конфигурацией:
     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
    
  • добавьте соответствующий MovementMethod программно в ваш TextView:
     mLink = (TextView) findViewById(R.id.link);
     if (mLink != null) {
       mLink.setMovementMethod(LinkMovementMethod.getInstance());
     }
    

Вот и все! И да, наличие таких параметров, как «autoLink» и «linksClickable», работающие только с явными ссылками (не завернутые в теги html), слишком вводят меня в заблуждение ...

56
ответ дан vizZ 15 August 2018 в 21:06
поделиться
  • 1
    +1 Ты прав. Должна быть возможность ввести шаблон себе, чтобы он соответствовал. Таким образом, это довольно глупо. – schlingel 21 August 2012 в 10:43
  • 2
    Это не работает для меня. Каково имя ресурсной HTML-подобной строки? – Konstantin Konopko 22 October 2013 в 18:10
Другие вопросы по тегам:

Похожие вопросы: