Як зробити посилання в текстовому перегляді, на якому можна натиснути?


1003

У мене визначено такий 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> </a> </ string > використовуйте вищевказану строку і вона працює. Дізнається, що рядок в href та with in anch тег повинен бути однаковим і мати .com або. * Для роботи потрібно перевірити, чому
Shaik Khader

<Рядок ім'я = "txtCredits»> Текст тут <a href=" google.com"> Google </a> </ рядок > Для вище фрагмента коду , натисніть на який - то текст тут не повинен працювати в моєму випадку , що я повинен робити?
Аджай Такур


android:focusable="true"вирішив мою проблему
Ханг .NT

Відповіді:


1228

Похований у демонстраціях 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 ())", тому просто врахуйте це, мені довелося створити перевірку, перш ніж додавати його
Хорхе Aguilar

40
Те ж саме. Зауважте, що якщо виклик setMovementMethod (), потрібно видалити autolink = "web" у файлі XML, інакше посилання не працюватиме. Дякую за коментар
voghDev

6
Просто використовуйте атрибут "autoLink" у своєму xml для: напр .: android: autoLink = "web"
Калпеш,

533

Я використовую лише android:autoLink="web"це, і це працює чудово. Клацання посилання відкриває браузер і показує правильну сторінку.

Я можу здогадатися, що інша думка знаходиться над посиланням. Що-небудь прозоре заповнює весь батько, але нічого не відображає над посиланням. У цьому випадку клік переходить до цього виду замість посилання.


3
Додано більше інформації вище. Чи може це я визначаю рядок як <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Схоже, це дозволено, але це не працює для мене.
Річард

6
якщо ви використовуєте linkkify auto, вам не потрібна частина href. ОС буде приймати розбір рядків для URL-адрес і перетворює кожну URL-адресу на посилання, яке можна натиснути. Але це не призведе до того, що слово google буде пов’язане з google.com. Це відображатиметься як посилання www.google.com.
Януш

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

2
android: autoLink також чудово підходить для зв’язування телефонних номерів, адрес та адрес електронної пошти (або всього вищезазначеного).
CloudMusic

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>вказали, що функція autoLink не працюватиме. За стільки відповідей на SO, це єдиний, хто згадував про це. Дякую!
cwhsu

Цей працює. Тестовано на API 29.
Wrichik Basu

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-аналізатор кожного разу, коли цей код виконується. Пам’ятайте про це, якщо ви використовуєте це для створення посилань усередині елемента списку або в інших критичних місцях вашої програми. Під час створення ListItem це збільшує час виконання моїх методів GetView від 50%
Janusz

1
Також пам’ятайте, що пробіли в URL-адресі повинні бути замінені на%20
Ніколас Тайлер,

Ви можете уникнути проблем із кодуванням сутності, загорнувши рядок у <![CDATA[ ... ]]>тег.
Пол Ламмертсма

1
РОБОТИ для мене, дякую. Не працює з <![CDATA[...]]>тегом.
ricky.tribbia

Це має бути відповідь! Чудово співпрацював із моїм рідним додатком
Ajay Kulkarni

68

я використав це просто

Linkify.addLinks(TextView, Linkify.ALL);

робить наведені тут посилання доступними для натискання


4
Ця відповідь найкраща. Працює над кожною версією Android, і нам просто потрібно додати цей метод, коли текст, встановлений у TextView. Бонус: це дозволяє нам додавати налаштовані посилання, які можна натискати
Керван

3
Дійсно найпростіша і найкраща відповідь. працює одночасно для електронної пошти / веб-сайтів .... дякую людині !!!
Імран Ахмед

1
Використовуйте LinkifyCompat, якщо вам потрібні деякі новіші вдосконалені функції
Вайден

Добре, це робить 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>

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 Unto 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.
sulai

Це те, що нарешті спрацювало для мене. Дійсний HTML і його використання android:autoLink=?не важливо!
Ніл Санче

Для Xamarin це слово показує, але не підкреслене, і його не можна натискати за допомогою наведених вище та НЕ цих параметрів: autoLink, linksClickable
maxweber

Для налаштування Xamarin ці налаштування Text або налаштування TextFormatted також дає слово, але його не можна натискати, ані синьою / підкресленою. Видалення автоматичної посилання також не вдається. Видалення лише посиланьClickable також не вдається. Видалення обох також не вдається.
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);

і він автоматично виявить веб-адреси з тексту в текстовому перегляді.


Щоправда, але їх не можна буде натискати.
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". Насправді, жоден з відповідей тут чи їх поєднання не працює досі.
Фіолетова жирафа

Чи увімкнено ваш пристрій чи емулятор в Інтернеті та встановлено його на УВІМКНЕНО (Wi-Fi) або підключено мережу LAN @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;

16

Ось дуже один рядок андроїд-коду, щоб зробити телефон і 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"/>

і це спрацювало як шарм.


13

Керуйте також зв’язуванням кольору тексту введіть тут опис зображення

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


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
Це буде спрацьовувати, але майте на увазі, що додаток може не потребувати дозволу в Інтернеті за межами цього текстового тексту, на якому можна натиснути. Можливо, в цих випадках
перевитрата

2
Чи справді це стосується питання?
Дарпан

2
Це не було відносно питання.
afollestad

1
Це ніколи не провалиться!
Skynet

Мені подобається цей метод, оскільки він дозволяє показувати лише текст прив’язки, а не повну 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" />

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"жодного; це за замовчуванням.


для мене це спрацювало без цього, прийнята відповідь спрацювала нормально @Kelly чи можете ви сказати версію 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>"));
    }

але я хотів би побачити текст і при натисканні на текст перенаправити на посилання (відкрите браузером)? Це рішення не вирішує цього, чи не так?
Duc Tran

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

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.


4

Телефон 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

Якщо ви використовуєте XML на основі TextView, для своєї вимоги вам потрібно зробити лише дві речі:

  1. Визначте своє посилання в рядку, наприклад "це моя веб-сторінка". Ви можете додати його в xml або в код.

  2. У xml, що містить TextView, додайте такі:


android:linksClickable="true"

android:autoLink="web"

4

Додайте CDATA до вашого рядкового ресурсу

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>

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

Це для мене працювало. Удачі.


Ви не створюєте посилання, яке можна натискати, ви просто ставите весь текст, на який можна натиснути TextView ... Це не питання.
clauziere

Погоджений, але іноді спосіб вирішення, який працює, - це те саме. Очевидно, що через 5 років після того, як була написана найпопулярніша відповідь, це все ще була проблемою, і пройшло 6 місяців, коли я мав ту саму проблему, але закінчився іншим, але робочим рішенням.
onaclov2000

2

Просто витратили стільки часу, щоб зрозуміти, що ви повинні використовувати getText (R.string.wever) замість getString (R.string.wever) ...

У будь-якому випадку, ось як я працював на шахті. З кількома гіперпосиланнями в одному і тому ж текстовому режимі.

    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>

Це набагато простіше і простіше у використанні. У мене є кілька посилань із власним текстом, який працює в динамічно доданому TextView через це. Для цього потрібно якомога більше оновлень. Мене ламають голову над Spanned рядками, спеціальними методами TextViews та HtmlCompat.fromHtml. Дякую тобі @ luca992.
Parth Patel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.