Как сделать ссылки в TextView кликабельными?

1004

У меня есть следующее определение TextView:

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

где @string/txtCreditsстроковый ресурс, который содержит<a href="some site">Link text</a> .

Android выделяет ссылки в TextView, но они не реагируют на нажатия. Может кто-нибудь сказать мне, что я делаю не так? Нужно ли устанавливать onClickListener для TextView в моей деятельности для чего-то такого простого?

Похоже, это связано с тем, как я определяю свой строковый ресурс. Это не работает:

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

Но это делает:

<string name="txtCredits">www.google.com</string>

Что является обломом, потому что я бы предпочел показать текстовую ссылку, чем показывать полный URL.

Ричард
источник
67
android: autoLink = "web" - это основная строка, которую нужно добавить в xml, и она работает как шарм. спасибо @Richard
jeet.chanchawat
1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > используйте приведенную выше строку, и она работает. Стало известно, что строка в href и with в теге привязки должна быть одинаковой и иметь .com или. * Для работы нужно проверить почему
Shaik Khader
<string name = "txtCredits"> Некоторый текст здесь <a href=" google.com"> Google </a> </ string > Для приведенного выше фрагмента. Нажмите на какой-нибудь текст здесь, который не должен работать в моем случае, что мне делать?
Аджай Такур
попробуйте github.com/ajaysahani/MultiActionTextView
Джавад Зеб
android:focusable="true"решил мою проблему
Khang .NT

Ответы:

1229

Похороненный в демоверсиях 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().

Ричард
источник
19
Может быть, это только я, но зачем тебе это делать с помощью EditText?
Джастин
1
Оказывается, только setMovementMethod необходим для достижения цели.
superarts.org
3
В качестве комментария я видел Samsung Galaxy S3 с ОС 4.3, который аварийно завершает работу при использовании «setMovementMethod (LinkMovementMethod.getInstance ())», поэтому просто примите это во внимание, мне пришлось создать проверку перед его добавлением
Хорхе Агилар
40
Тоже самое. Обратите внимание, что если вызывается setMovementMethod (), необходимо удалить autolink = "web" в файле XML, иначе ссылка не будет работать. Спасибо за комментарий
voghDev
6
Просто используйте атрибут "autoLink" в вашем xml, например: android: autoLink = "web"
Kalpesh
533

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

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

Януш
источник
3
Добавлено больше информации выше. Может быть, я определяю строку как <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Похоже, это разрешено, но это не работает для меня.
Ричард
6
если вы используете linkify auto, вам не нужна часть href. Операционная система примет строку, проанализировав ее для URL-адресов, и преобразует каждый URL-адрес в интерактивную ссылку. Но это не приведет к тому, что слово google будет связано с google.com. Это будет отображать www.google.com в качестве ссылки.
Януш
использование autolink прекрасно работает и для меня, просто textview без родителя.
euther
2
android: autoLink также отлично подходит для связывания телефонных номеров, адресов и адресов электронной почты (или всего вышеперечисленного).
CloudyMusic
54
Нет, это не так, потому что этот ответ не работает, если вы не хотите использовать тег привязки с отображаемым текстом, отличным от URL
cprcrack
375

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

  • 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, если вы хотите, чтобы все ссылки были кликабельными.

возлюбленный Израиль
источник
setMovementMethod не работает со вторым вариантом, который вы упомянули, т. е. google.com .. какое-либо обновление?
Дарпан
16
Спасибо за указание, что <a href="http://www.google.com">Go to Google</a>не будет работать для автоссылки. Для стольких ответов на SO, это единственный, который упомянул об этом. Спасибо!
cwhsu
Этот работает. Проверено на API 29.
Ричик Басу
96

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

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

и не:

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

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

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

 android:linksClickable="true"

Наконец, в коде выполните:

((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)));

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

Блажей Чапп
источник
7
Это создаст парсер HTML каждый раз, когда выполняется этот код. Помните об этом, если вы используете это для создания ссылок внутри элемента списка или в других критически важных местах в вашем приложении. Во время создания элемента списка это увеличивает время выполнения моих методов getView на 50%
Janusz
1
Также обратите внимание, пробелы в URL должны быть заменены на%20
Николас Тайлер
Вы можете избежать проблем кодирования сущностей, обернув вашу строку в <![CDATA[ ... ]]>тег.
Пол Ламмерцма
1
Работает на меня, спасибо. Не работает с <![CDATA[...]]>тегом.
ricky.tribbia
Это должен быть ответ! Отлично работало с моим родным приложением
Ajay Kulkarni
69

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

Linkify.addLinks(TextView, Linkify.ALL);

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

jai_b
источник
4
Этот ответ самый лучший. Работает на каждой версии Android, и нам просто нужно добавить этот метод, когда текст установлен в TextView. Бонус: это позволяет нам добавлять настраиваемые кликабельные ссылки
Kerwan
3
Действительно самый простой и лучший ответ. это работает для электронной почты / сети в то же время .... спасибо человек !!!
Имран Ахмед
1
Используйте LinkifyCompat, если вам нужны более новые расширенные функции
Vaiden
Хорошо, это делает URL без <a href...кликабельности
Павел
Это также заставляет все «html» теги внутри работать соответственно, например, <b> ... </ b> и т. Д.
Массив
67

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

  • добавить HTML-подобную строку ресурса:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • добавьте ваш вид в макет без НИКАКОЙ специфичной для ссылки конфигурации:

     <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-теги), также вводит меня в заблуждение ...

Визз
источник
2
+1 Ты прав. Должна быть возможность ввести шаблон самостоятельно, чтобы он соответствовал. Таким образом, это довольно глупо.
Шлингель
47

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

layout.xml образец

    <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>
Shanewaj
источник
36

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

В string.xml:

<string name="applink">Looking for Digital Visiting card? 
<a href="https://play.google.com/store/apps/details?id=com.themarkwebs.govcard">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());

К настоящему времени вам не нужно устанавливать android:autoLink="web"илиandroid:linksClickable="true" использовать этот подход.

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

Ашеша Джордж
источник
Это хорошо работает, но когда вы откроете веб-браузер, только закройте браузер, но не возвращайтесь в приложение.
Jachumbelechao в Mantekilla
27

Я надеюсь, что это поможет вам;

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());
Бебин Т.Н.
источник
3
Это прекрасно работает. Также убедитесь, что вы удалите android:autoLink=?из своего TextView.
Сулай
Это то, что, наконец, сработало для меня. Важен HTML и неиспользование android:autoLink=?важно!
Нил Санч
Для Xamarin слово показывает, но не подчеркнуто, и его нельзя щелкнуть, используя приведенные выше, а НЕ эти параметры: autoLink, linksClickable
maxweber
Для Xamarin установка их и установка Text или настройка TextFormatted также дает слово, но оно не кликабельно и не синее / подчеркнутое. Удаление автоссылки также не удается. Удаление только ссылки кликабельны также не удается. Удаление обоих также не удается.
maxweber
helloWorld.TextFormatted = Html.FromHtml (linkURL); с и без таковых тоже не получается. (не связано, не синее, не может быть нажата)
maxweber
25

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

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>
Ахмед Мостафа
источник
24

Самое простое, что сработало для меня, это использовать 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);

и он автоматически обнаружит веб-ссылки из текста в текстовом представлении.

PKS
источник
Правда, но они не будут кликабельными.
FractalBob
Ссылки кликабельны.
Октавиан Ионель
19

Ричард, в следующий раз тебе следует добавить этот код в 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>

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

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

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Дэвид Дималанта
источник
3
Не работает для меня Ссылка действительно кликабельна, но отображается вся строка, а не только «Google». На самом деле, ни один из ответов здесь или их комбинации не работает до сих пор.
Фиолетовый Жираф
Включено ли на вашем устройстве интернет-соединение или эмулятор и включено ли оно (wifi) или подключена локальная сеть, @Violet Giraffe?
Дэвид Дималанта
Это. Мне никогда не удавалось сделать ссылки кликабельными, используя только атрибуты XML, для этого пришлось прибегнуть к Java-коду. Что не страшно, но не приятно.
Фиолетовый Жираф
18

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

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

Не забудь

import android.widget.TextView;
DeathRs
источник
16

Вот очень строковый код Android для выбора телефона и 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);
Рахул Райна
источник
13

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

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

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

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

и это сработало как шарм.

aLearner
источник
13

Управление Linkify Text Color Также введите описание изображения здесь

tv_customer_care_no.setLinkTextColor(getResources().getColor(R.color.blue));
  tv_customer_care_no.setText("For us to reach out to you, please fill the details below or contact our customer care at  18004190899 or visit our website http://www.dupont.co.in/corporate-links/contact-dupont.html ");
   Linkify.addLinks(tv_customer_care_no, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
   Linkify.addLinks(tv_customer_care_no, Linkify.ALL );
Кешав Гера
источник
11

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

elevenfive
источник
10

Использовать этот...

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"/>
Тедж
источник
1
Это будет работать, но имейте в виду, что приложению может не потребоваться разрешение на доступ к Интернету, кроме этого интерактивного TextView. Может быть, излишним в этих случаях
Jose_GD
2
Это действительно относится к вопросу?
Дарпан
2
Это не относится к вопросу.
Афоллестад
1
Это никогда не подведет!
Скайнет
Мне нравится этот метод, так как он позволяет нам показывать только текст привязки, а не полный URL. Якорный текст также может быть стилизован, например, окрашен в зеленый цвет и подчеркнут.
потерянный ребенок
10

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

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" />
Androdos
источник
10

Принятый ответ правильный, НО это будет означать, что номера телефонов, карты, адреса электронной почты и обычные ссылки, например 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"либо; это правда по умолчанию.

Келли Маккиннон
источник
для меня это работало без этого, принятый ответ работал нормально @ Келли, вы можете сказать версию Android и устройство, на котором вы получили проблему?
Ахил папа
Не работает для myapp://схем (для Deep Linking).
CoolMind
7

Так я решил кликабельные и видимые ссылки в 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>"));
    }
Доминик Бартл
источник
но я хотел бы видеть текст, и при нажатии на текст он перенаправляет на ссылку (открывается браузером)? Это решение не решает, не так ли?
Дык Тран
6

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

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));
Phuc Tran
источник
6

[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.
}
Бенни
источник
5

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

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

Джереми Логан
источник
2
Ссылки в TextView имеют другой цвет, чем другой текст в строке, поэтому я думаю, что они распознаются как ссылки. Они просто не кликабельны :-(
Ричард
4

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

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

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 (в 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.

degausser
источник
4

Автолинк у меня не работает. Следующее работает как шарм,

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());
user1995307
источник
4

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

  1. Укажите вашу ссылку в строке, например, «это моя веб-страница». Вы можете добавить его в XML или в коде.

  2. В XML, который имеет TextView, добавьте эти:


android:linksClickable="true"

android:autoLink="web"
codeFood
источник
4

Добавьте CDATA к вашему строковому ресурсу

strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>
Akexorcist
источник
3

Я использую автолинк для «автоматического подчеркивания» текста, но просто создал «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).

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

onaclov2000
источник
Вы не создаете ссылку, по которой можно кликать, вы просто делаете весь текстовый вид кликабельным ... Вопрос не в этом.
Clauziere
Договорились, но иногда обходной путь, который работает, это одно и то же. Ясно, что через 5 лет после того, как был написан самый популярный ответ, это все еще оставалось проблемой, и прошло 6 месяцев, потому что у меня была та же проблема, но в итоге я нашел другое, но работающее решение.
onaclov2000
2

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

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

    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>
luca992
источник
Это намного проще и проще в использовании. Из-за этого у меня есть несколько ссылок с пользовательским текстом, работающим в динамически добавляемом TextView. Это требует максимально возможного количества голосов. Я ломал голову над строками Spanned, пользовательскими TextViews и методами HtmlCompat.fromHtml. Большое вам спасибо @ luca992.
Парт Патель