Jak sprawić, by linki w TextView były klikalne?

1003

Mam zdefiniowany następujący 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>

gdzie @string/txtCreditsjest zasób łańcucha, który zawiera <a href="some site">Link text</a>.

Android wyróżnia linki w TextView, ale nie reagują one na kliknięcia. Czy ktoś może mi powiedzieć, co robię źle? Czy muszę ustawić onClickListener dla TextView w mojej aktywności dla czegoś tak prostego?

Wygląda na to, że ma to związek ze sposobem, w jaki definiuję mój zasób łańcucha. To nie działa:

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

Ale to powoduje:

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

Co jest niepotrzebne, ponieważ wolałbym wyświetlić link tekstowy niż pełny adres URL.

Richard
źródło
67
android: autoLink = "web" jest to główna linia, którą należy dodać do xml i działa jak urok. dzięki @Richard
jeet.chanchawat
1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > użyj powyższego sttring i działa. To dowiedziałem się, że ciąg w href oraz w tagu zakotwiczenia muszą być takie same i mają .com lub * na potrzeby pracy, aby sprawdzić, dlaczego.
Shaik Khader
<string name = "txtCredits"> Trochę tekstu tutaj <a href=" google.com"> Google </a> </ string > Dla powyższego fragmentu Kliknij Tutaj jakiś tekst nie powinien działać w moim przypadku co powinienem zrobić?
Ajay Takur,
android:focusable="true"rozwiązał mój problem
Khang .NT

Odpowiedzi:

1228

Pochowany w prezentacjach API znalazłem rozwiązanie mojego problemu:

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

Usunąłem większość atrybutów z TextView, aby dopasować to, co było w wersji demonstracyjnej.

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

To rozwiązało. Całkiem trudno je odkryć i naprawić.

Ważne : nie zapomnij usunąć, autoLink="web"jeśli dzwonisz setMovementMethod().

Richard
źródło
19
Może to tylko ja, ale dlaczego miałbyś to robić za pomocą EditText?
Justin
1
Okazuje się, że tylko setMovementMethod jest potrzebny do osiągnięcia celu.
superarts.org,
3
Tak na marginesie, widziałem Samsung Galaxy S3 z OS 4.3, który ulega awarii, gdy używany jest „setMovementMethod (LinkMovementMethod.getInstance ())”, więc po prostu weź to pod uwagę, musiałem utworzyć weryfikację przed dodaniem
Jorge Aguilar,
40
To samo tutaj. Zauważ, że jeśli wywoływana jest metoda setMovementMethod (), konieczne jest usunięcie autolink = "web" w pliku XML, w przeciwnym razie link nie będzie działał. Dzięki za komentarz
voghDev
6
Wystarczy użyć atrybutu „autoLink” w pliku XML np. Dla Androida: autoLink = „web”
Kalpesh
533

Używam tylko android:autoLink="web"i działa dobrze. Kliknięcie linku powoduje otwarcie przeglądarki i wyświetlenie właściwej strony.

Mogę zgadnąć, że jakiś inny widok znajduje się nad linkiem. Coś, co jest przezroczyste, wypełnia całego rodzica, ale nie wyświetla niczego powyżej linku. W takim przypadku kliknięcie powoduje przejście do tego widoku zamiast łącza.

Janusz
źródło
3
Dodano więcej informacji powyżej. Czy to może być sposób, w jaki definiuję ciąg jako <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Wygląda na to, że jest to dozwolone, ale nie działa dla mnie.
Richard
6
jeśli używasz linkify auto, nie potrzebujesz części href. System operacyjny pobierze ciąg parsuje go pod kątem adresów URL i konwertuje każdy adres URL na klikalny link. Ale to nie spowoduje, że słowo google zostanie połączone z google.com. Wyświetliłby www.google.com jako link.
Janusz
Korzystanie z autolink działa również idealnie dla mnie, zwykły podgląd tekstu bez rodzica.
euther
2
Android: autoLink działa również świetnie do linkowania numerów telefonów, adresów i adresów e-mail (lub wszystkich powyższych).
CloudyMusic
54
Nie, nie jest, ponieważ ta odpowiedź nie działa, jeśli nie chcesz używać tagu kotwicy z wyświetlanym tekstem innym niż adres URL
cprcrack
375

Po spędzeniu z tym trochę czasu odkryłem, że:

  • android:autoLink="web"działa, jeśli masz pełne linki w swoim HTML. Następujące elementy zostaną wyróżnione na niebiesko i klikalne:
  • Jakiś tekst <a href="http://www.google.com">http://www.google.com</a>
  • Jakiś tekst http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); będzie działać z następującymi (zostaną podświetlone i klikalne):
  • Jakiś tekst <a href="http://www.google.com">http://www.google.com</a>
  • Jakiś tekst http://www.google.com
  • Jakiś tekst <a href="http://www.google.com">Go to Google</a>

Zauważ, że trzecia opcja ma hiperłącze, ale sam opis linku (część między tagami) nie jest linkiem. android:autoLink="web"ma nie pracować z takimi linkami.

  • android:autoLink="web"jeśli ustawiony w XML zastąpi view.setMovementMethod(LinkMovementMethod.getInstance());(tj. linki trzeciego rodzaju zostaną podświetlone, ale nie klikalne).

Morał tej historii jest wykorzystywany view.setMovementMethod(LinkMovementMethod.getInstance());w kodzie i upewnij się, że nie masz go android:autoLink="web"w układzie XML, jeśli chcesz, aby wszystkie linki były klikalne.

Jeshurun
źródło
setMovementMethod nie działa z drugą opcją, o której wspomniałeś, tj. google.com .. jakakolwiek aktualizacja?
Darpan
16
Dziękujemy za zwrócenie uwagi, że <a href="http://www.google.com">Go to Google</a>nie będzie działać w przypadku autoLink. W przypadku tak wielu odpowiedzi na temat SO jest to jedyna, która o tym wspomniała. Dziękuję Ci!
cwhsu
Ten działa. Testowane na API 29.
Wrichik Basu
96

Powyższe rozwiązania nie działały dla mnie, ale następujące działały (i wydają się nieco czystsze).
Najpierw w zasobie łańcucha zdefiniuj szewrony otwierające znacznik, używając kodowania encji HTML, tj .:

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

i nie:

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

Zasadniczo koduj wszystkie szewrony w taki sposób. BTW, link musi zaczynać się odhttp://

Następnie (zgodnie z sugestią tutaj ) ustaw tę opcję w TextView:

 android:linksClickable="true"

Na koniec w kodzie wykonaj:

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

To wszystko, nie wymaga żadnych wyrażeń regularnych ani innych ręcznych hacków.

Błażej Czapp
źródło
7
Spowoduje to utworzenie parsera HTML przy każdym uruchomieniu tego kodu. Pamiętaj o tym, jeśli używasz tego do tworzenia linków wewnątrz elementu listy lub w innych krytycznych dla wydajności miejscach w aplikacji. Podczas tworzenia listitem wydłuża to czas wykonywania moich metod getView o 50%
Janusz
1
Pamiętaj też, że spacje w adresie URL muszą zostać zastąpione przez%20
Nicolas Tyler
Możesz uniknąć problemów z kodowaniem encji, zawijając swój ciąg w <![CDATA[ ... ]]>tagu.
Paul Lammertsma
1
DZIAŁA dla mnie, dziękuję. Nie działa z <![CDATA[...]]>tagiem.
ricky.tribbia
To powinna być odpowiedź! Doskonale działał z moją natywną aplikacją
Ajay Kulkarni,
68

użyłem tego po prostu

Linkify.addLinks(TextView, Linkify.ALL);

umożliwia klikanie podanych tutaj linków

jai_b
źródło
4
Ta odpowiedź jest najlepsza. Działa na każdej wersji Androida i musimy tylko dodać tę metodę, gdy tekst jest ustawiony w TextView. Premia: pozwala nam dodawać konfigurowalne linki klikalne
Kerwan
3
Naprawdę najprostsza i najlepsza odpowiedź. to działa na e-mail / internet w tym samym czasie .... dzięki stary !!!
Imran Ahmed
1
Użyj LinksfyCompat, jeśli potrzebujesz niektórych z nowszych zaawansowanych funkcji
Vaiden
Dobrze, sprawia, że ​​adresy URL nie są <a href...klikalne
Pavel
Sprawia również, że wszystkie tagi „html” wewnątrz działają odpowiednio, np. <b> ... </b> itd.
Array
67

Jeśli chcesz dodać link podobny do HTML, wszystko, co musisz zrobić, to:

  • dodaj ciąg podobny do HTML:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • dodaj swój widok do układu BEZ żadnej konfiguracji specyficznej dla łącza:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • dodaj program MovementMethod programowo do TextView:

     mLink = (TextView) findViewById(R.id.link);
     if (mLink != null) {
       mLink.setMovementMethod(LinkMovementMethod.getInstance());
     }

Otóż ​​to! I tak, posiadanie opcji takich jak „autoLink” i „linksClickable” działające tylko na wyraźnych linkach (niepakowanych w tagi HTML) jest również bardzo mylące dla mnie ...

vizZ
źródło
2
+1 Masz rację. Powinna istnieć możliwość wprowadzenia własnego wzoru, aby był on dopasowany. W ten sposób jest to głupie.
schlingel,
47

Dodałem tę linię do TextView: android:autoLink="web"
Poniżej znajduje się przykład użycia w pliku układu.

layout.xml próba

    <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:[email protected]?Subject=Lost%20Password" target="_top">[email protected]</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
źródło
36

Poniższe informacje powinny działać dla każdego, kto szuka kombinacji tekstu i hiperłącza w aplikacji na Androida.

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

Teraz możesz wykorzystać to stringw dowolnym z Viewponiższych:

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

Teraz w swojej Aktywności lub fragmencie wykonaj następujące czynności:

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

Do tej pory nie musisz ustawiać android:autoLink="web"ani android:linksClickable="true"używać tego podejścia.

Mam nadzieję, że okaże się to pomocne.

Asesha George
źródło
Działa to dobrze, ale kiedy wrócisz z otwartej strony internetowej, zamknij tylko przeglądarkę, ale nie wróć do aplikacji.
Jachumbelechao Unto Mantekilla
27

Mam nadzieję, że to Ci pomoże;

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());
Bebin TN
źródło
3
To działa świetnie. Upewnij się również, że usunąłeś android:autoLink=?ze swojego TextView.
sulai
To w końcu dla mnie zadziałało. Ważny jest HTML i nieużywanie android:autoLink=?jest ważne!
Neal Sanche
W przypadku Xamarina słowo to pokazuje, ale nie jest podkreślone i nie można go kliknąć przy użyciu powyższego, a NIE tych parametrów: autoLink, linksClickable
maxweber
W przypadku Xamarin ustawienie tych i ustawienie Text lub ustawienie TextFormatted również daje słowo, ale nie można go kliknąć ani niebieski / podkreślony. Usunięcie autoLink również nie powiedzie się. Usunięcie tylko łączyClickable również kończy się niepowodzeniem. Usunięcie obu nie powiedzie się.
maxweber
helloWorld.TextFormatted = Html.FromHtml (linkURL); z tymi i bez nich również zawodzi. (
niepowiązane
25

Tylko to, czego potrzebujesz, aby dodać to w widoku tekstowym w XML

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>
Ahmed Mostafa
źródło
24

Najłatwiejszą rzeczą, która działała dla mnie, jest użycie 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);

i automatycznie wykryje adresy URL z tekstu w widoku tekstu.

szt
źródło
To prawda, ale nie będzie można ich kliknąć.
FractalBob,
Linki są klikalne.
Octavian Ionel
19

Richard, następnym razem powinieneś dodać ten kod w TextView w XML-ie układu.

android:autoLink="all"

Tak powinno być.

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

Nie musisz używać tego kodu ( t2.setMovementMethod(LinkMovementMethod.getInstance());), aby link był klikalny.

Oto też prawda: dopóki ustawisz autoLink i linksClickable , nie zapomnij dodać tego w pliku String.xml , aby link klikalny działał.

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
David Dimalanta
źródło
3
Nie działa dla mnie. Link jest rzeczywiście klikalny, ale wyświetlany jest cały ciąg, nie tylko „Google”. W rzeczywistości żadna z odpowiedzi tutaj ani ich kombinacja nie działa do tej pory.
Violet Giraffe
Czy Twoje urządzenie lub emulator Internetu jest włączone i ustaw je na WŁĄCZONE (Wi-Fi), czy masz podłączone LAN, @Violet Giraffe?
David Dimalanta
To jest. Nigdy nie udało mi się sprawić, by linki były klikalne przy użyciu tylko atrybutów XML, musiałem do tego skorzystać z kodu Java. Co nie jest niczym wielkim, ale nie jest miłe.
Violet Giraffe
18

za pomocą linkify : Linkify weź kawałek tekstu i wyrażenie regularne i zamieni wszystkie dopasowania wyrażeń regularnych w tekście w klikalne linki

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

Nie zapomnij

import android.widget.TextView;
DeathRs
źródło
16

Oto bardzo liniowy kod Androida, dzięki któremu telefon i adres URL można wybierać z tekstu Wyświetl bez względu na ciąg znaków i dane. Nie musisz do tego używać żadnych tagów 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);
Rahul Raina
źródło
13

Zauważyłem, że w android:autoLink="web"ten sposób

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

działało OK dla adresów URL, ale ponieważ miałem adres e-mail i numer telefonu, który również chciałem połączyć, skończyłem z użyciem tej linii w android:autoLink="all"ten sposób

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

i działało jak urok.

Uczeń
źródło
13

Zarządzaj linkami Tekst Kolor także wprowadź opis zdjęcia tutaj

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 );
Keshav Gera
źródło
11

Pamiętaj, aby nie używać setAutoLinkMask(Linkify.ALL)podczas używania setMovementMethod(LinkMovementMethod.getInstance())i Html.fromHTML()prawidłowo sformatowanych HTMLlinków (na przykład <a href="http://www.google.com/">Google</a>).

jedenaście pięć
źródło
10

Użyj tego...

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

                });

i dodaj uprawnienia w pliku manifestu

<uses-permission android:name="android.permission.INTERNET"/>
Tej
źródło
1
To zadziała, ale pamiętaj, że aplikacja może nie potrzebować uprawnień internetowych poza tym, który można kliknąć TextView. Może w tych przypadkach
przesada
2
Czy to naprawdę dotyczy pytania?
Darpan,
2
To nie dotyczyło pytania.
afollestad,
1
To nigdy nie zawiedzie!
Skynet,
Podoba mi się ta metoda, ponieważ pozwala nam wyświetlać tekst kotwicy zamiast pełnego adresu URL. Tekst kotwicy można również nadać styl, np. Kolor zielony i podkreślić.
zaginione dziecko
10

Potrzebujesz tylko tego:

android:autoLink="web"

Wstaw ten wiersz do TextView, który można kliknąć w odniesieniu do sieci. Adres URL ustawiony jako tekst tego TextView.

Przykład:

 <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
źródło
10

Akceptowana odpowiedź jest poprawna, ALE oznacza to, że numery telefonów, mapy, adresy e-mail i zwykłe linki, np. http://google.comBez tagów href, NIE JUŻ WIĘCEJ będą klikalne, ponieważ nie możesz mieć automatycznego łącza w pliku XML.

Jedyne kompletne rozwiązanie, w którym WSZYSTKO można kliknąć, które znalazłem, to:

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

I TextView NIE powinien mieć android:autolink. Nie ma też takiej potrzeby android:linksClickable="true"; to prawda, domyślnie.

Kelly McKinnon
źródło
dla mnie to działało bez tego, zaakceptowana odpowiedź działała dobrze @Kelly, czy możesz powiedzieć wersję Androida i urządzenie, na którym masz problem?
Tata Achili
Nie działa w przypadku myapp://schematów (w przypadku głębokiego linkowania).
CoolMind
7

W ten sposób rozwiązałem klikalne i widoczne linki w TextView (według kodu)

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>"));
    }
Dominic Bartl
źródło
ale chciałbym zobaczyć tekst i po kliknięciu przekierowuje do linku (otwieranego przez przeglądarkę)? To rozwiązanie tego nie rozwiązuje, prawda?
Duc Tran
6

Użyj poniższego kodu:

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
źródło
6

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

Możesz pobrać ciąg HTML z backendu lub z plików zasobów. Jeśli umieścisz tekst jako ciąg zasobu, pamiętaj o dodaniu CDATAznacznika:

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

Następnie w kodzie musisz pobrać ciąg i przypisać go jako HTML i ustawić metodę ruchu łącza:

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.
}
Benny
źródło
5

Przyczyną tego problemu jest to, że próbuje dopasować tylko „nagie” adresy. takie jak „www.google.com” lub „ http://www.google.com ”.

Uruchomienie tekstu przez Html.fromHtml () powinno załatwić sprawę . Musisz to zrobić programowo, ale działa.

Jeremy Logan
źródło
2
Łącza w TextView mają inny kolor niż inny tekst w ciągu, więc myślę, że są rozpoznawane jako łącza. Po prostu nie można ich kliknąć :-(
Richard
4

Nie wiem, czy warto dodać kolejną odpowiedź, ale na wszelki wypadek ...

Musiałem wytropić to w kilku miejscach, ale w końcu udało mi się uruchomić tę wersję kodu.

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

Spowoduje to utworzenie dwóch klikalne odnośniki z tekstu link text1i link text2które przekierować użytkownika do Google.

degausser
źródło
4

Telefon Autolink nie działa dla mnie. Poniższe działało jak urok,

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());
użytkownik1995307
źródło
4

Jeśli korzystasz z TextView opartego na XML, dla swoich wymagań musisz zrobić tylko dwie rzeczy:

  1. Zidentyfikuj link w ciągu, na przykład „to jest moja strona internetowa”. Możesz dodać go w formacie xml lub w kodzie.

  2. W pliku XML, który ma TextView, dodaj te:


android:linksClickable="true"

android:autoLink="web"
codeFood
źródło
4

Dodaj CDATA do zasobu ciągów

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>
Akexorcist
źródło
3

Używam automatycznego linku do „automatycznego podkreślenia” tekstu, ale właśnie wykonałem „onClick”, który nim zarządza. (Sam napotkałem ten problem)

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

Nie wymaga żadnych uprawnień, ponieważ przekazujesz zamiar aplikacjom zarządzającym tymi zasobami (przeglądarka IE).

To działało dla mnie. Powodzenia.

onaclov2000
źródło
Nie tworzysz linku, który można kliknąć, po prostu umieszczasz cały TextView jako klikalny ... To nie jest pytanie.
clauziere
Uzgodnione, ale czasami obejście, które działa, jest tym samym. Najwyraźniej 5 lat po napisaniu najpopularniejszej odpowiedzi wciąż był to problem, a przez 6 miesięcy miałem ten sam problem, ale skończyło się na innym, ale działającym rozwiązaniu.
onaclov2000
2

Po prostu zmarnowałem tyle czasu, aby dowiedzieć się, że musisz użyć getText (R.string. Cokolwiek) zamiast getString (R.string. Cokolwiek) ...

Tak czy inaczej, oto w jaki sposób mój działał. Z wieloma hiperłączami w tym samym widoku tekstu.

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

przykład ciągu

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>
luca992
źródło
Jest to o wiele prostsze i łatwiejsze w użyciu. Z tego powodu mam wiele linków z niestandardowym tekstem działającym w dynamicznie dodawanym TextView. To wymaga jak największej liczby pozytywnych opinii. Łamałem głowę nad rozpiętymi ciągami, niestandardowymi metodami TextViews i HtmlCompat.fromHtml. Dziękuję bardzo @ luca992.
Parth Patel