TextView içindeki bağlantıları tıklanabilir hale nasıl getirebilirim?


1003

Aşağıdaki TextView tanımlı var:

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

burada @string/txtCreditsiçeren bir dize kaynağıdır <a href="some site">Link text</a>.

Android, TextView içindeki bağlantıları vurgular, ancak tıklamalara yanıt vermezler. Birisi bana neyi yanlış yaptığımı söyleyebilir mi? Bu kadar basit bir şey için aktivitemde TextView için bir onClickListener ayarlamam gerekir mi?

Görünüşe göre dize kaynağımı tanımlama şeklimle ilgili. Bu çalışmıyor:

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

Ancak bu:

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

Hangi bir bummer çünkü tam URL göstermek yerine bir metin bağlantısı göstermek istiyorum.


67
android: autoLink = "web" Bu ana satır xml eklenmelidir ve çekicilik gibi çalışır. thanks @Richard
jeet.chanchawat

1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > yukarıdaki şeritlemeyi kullanın ve işe yarar. Href ve çapa etiketi ile dizenin aynı olması ve .com veya. *
Olması

<string name = "txtCredits"> Buradaki bazı metinler <a href=" google.com"> Google </a> </ string > Yukarıdaki snippet için Tıklayın Buradaki bazı metinler benim durumumda çalışmamalıdır Ne yapmalıyım?
Ajay Takur


android:focusable="true"sorunumu çözdü
Khang .NT

Yanıtlar:


1228

API demolarına gömüldüm ve sorunuma çözüm buldum:

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

Demo'mdakiyle eşleşmek için TextView'umdaki özelliklerin çoğunu kaldırdım.

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

Bu çözüldü. Ortaya çıkarmak ve düzeltmek oldukça zor.

Önemli : Telefon autoLink="web"ediyorsanız kaldırmayı unutmayın setMovementMethod().


19
Belki de sadece benim, ama bunu neden bir EditText ile yaptın?
Justin

1
Hedefe ulaşmak için sadece setMovementMethod gerekir.
superarts.org

3
Bir yorum olarak, "setMovementMethod (LinkMovementMethod.getInstance ())" kullanıldığında OS 4.3 ile birlikte bazı Samsung Galaxy S3 gördüm, bu yüzden bunu dikkate alın, eklemeden önce bir doğrulama oluşturmak zorunda kaldım
Jorge Aguilar

40
Burada aynı. SetMovementMethod () çağrılırsa, XML dosyasındaki autolink = "web" ifadesinin kaldırılması gerektiğini, aksi takdirde bağlantının çalışmadığını unutmayın. Yorum için teşekkürler
voghDev

6
Sadece xml'nizdeki "autoLink" özelliğini kullanın, örneğin: android: autoLink = "web"
Kalpesh

533

Sadece kullanıyorum android:autoLink="web"ve iyi çalışıyor. Bağlantıya tıklandığında tarayıcı açılır ve doğru sayfa gösterilir.

Tahmin edebileceğim bir şey, başka bir görüşün bağlantının üstünde olmasıdır. Şeffaf bir şey tüm ebeveyni doldurur ancak bağlantının üzerinde hiçbir şey göstermez. Bu durumda, tıklama bağlantı yerine bu görünüme gider.


3
Yukarıda daha fazla bilgi eklendi. Dizeyi <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string > olarak tanımladığım yol olabilir mi? Buna izin veriliyor ama benim için çalışmıyor.
Richard

6
linkify auto kullanıyorsanız bir href parçasına ihtiyacınız yoktur. İşletim sistemi dizeyi URL'ler için ayrıştırır ve her URL'yi tıklanabilir bir bağlantıya dönüştürür. Ancak bu, google kelimesinin google.com ile bağlantılı olmasına neden olmaz. Www.google.com'u bağlantı olarak görüntüler.
Janusz

autolink kullanmak benim için mükemmel çalışıyor, ebeveynsiz düz metin görünümü.
Euther

2
android: autoLink, telefon numaralarını, adresleri ve e-posta adreslerini (veya yukarıdakilerin tümünü) bağlamak için de harika çalışır.
CloudyMusic

54
Hayır, çünkü URL'den farklı bir ekran metnine sahip bir tutturma etiketi kullanmıyorsanız bu cevap işe yaramaz
cprcrack

375

Bununla biraz zaman geçirdikten sonra şunu buldum:

  • android:autoLink="web"HTML'nizde tam bağlantılar varsa çalışır. Aşağıdakiler mavi ve tıklanabilir olarak vurgulanacaktır:
  • Bazı metin <a href="http://www.google.com">http://www.google.com</a>
  • Bazı metin http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); aşağıdakilerle çalışır (vurgulanır ve tıklanabilir):
  • Bazı metin <a href="http://www.google.com">http://www.google.com</a>
  • Bazı metin http://www.google.com
  • Bazı metin <a href="http://www.google.com">Go to Google</a>

Üçüncü seçeneğin bir köprüye sahip olduğunu, ancak bağlantının (etiketler arasındaki bölüm) kendisinin bir bağlantı olmadığını unutmayın. android:autoLink="web"yok DEĞİL tür bağlantılara ile çalışır.

  • android:autoLink="web"XML'de ayarlanmışsa geçersiz kılınır view.setMovementMethod(LinkMovementMethod.getInstance());(üçüncü tür bağlantılar vurgulanır, ancak tıklanamaz).

Hikayenin ahlaki view.setMovementMethod(LinkMovementMethod.getInstance());kodu kodunuzda kullanmak ve tüm bağlantıların tıklanabilir olmasını android:autoLink="web"istiyorsanız XML düzeninizde olmadığından emin olun .


setMovementMethod bahsettiğiniz ikinci seçenekle çalışmaz yani google.com .. herhangi bir güncelleme?
Darpan

16
Otomatik Bağlantı için <a href="http://www.google.com">Go to Google</a>işe yaramayacağına işaret ettiğiniz için teşekkür ederiz . SO ile ilgili birçok cevap için, bundan bahseden tek cevap budur. Teşekkür ederim!
cwhsu

Bu işe yarıyor. API 29'da test edildi.
Wrichik Basu

96

Yukarıdaki çözümler benim için işe yaramadı, ancak aşağıdakiler işe yaradı (ve biraz daha temiz görünüyor).
İlk olarak, dize kaynağında, HTML öğesi kodlamasını kullanarak etiket açma köşeli çift ayraçlarınızı tanımlayın, yani:

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

ve yok:

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

Genel olarak, dizedeki tüm köşeli çift ayraçları böyle kodlayın. BTW, bağlantı ile başlamalıdırhttp://

Sonra ( burada önerildiği gibi ) TextView'ınızda bu seçeneği ayarlayın:

 android:linksClickable="true"

Son olarak, kodda şunları yapın:

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

Bu kadar, regexes veya diğer manuel korsanlara gerek yok.


7
Bu, bu kod her yürütüldüğünde bir HTML Ayrıştırıcı oluşturur. Bir liste öğesinin içinde veya uygulamanızdaki performans açısından kritik diğer yerlerde bağlantı oluşturmak için bunu kullanırsanız bunu unutmayın. Bir liste oluştururken, bu benim getView Yöntemleri yürütme süresini% 50 indirir
Janusz

1
Ayrıca URL'deki boşlukların değiştirilmesi gerekir%20
Nicolas Tyler

Dizenizi <![CDATA[ ... ]]>etikete sararak varlık kodlama sorunlarını önleyebilirsiniz .
Paul Lammertsma

1
Benim için çalışıyor, teşekkürler. <![CDATA[...]]>Etiketi ile çalışmıyor .
ricky.tribbia

Cevap bu olmalı! Benim yerli uygulaması ile mükemmel çalıştı
Ajay Kulkarni

68

bunu basitçe kullandım

Linkify.addLinks(TextView, Linkify.ALL);

burada verilen bağlantıları tıklanabilir yapar


4
Bu cevap en iyisidir. Her Android sürümünde çalışır ve TextView'de ayarlanan metin olduğunda bu yöntemi eklememiz yeterlidir. Bonus: tıklanabilir özelleştirilebilir bağlantılar eklememize izin verir
Kerwan

3
Gerçekten en basit ve en iyi cevap. aynı zamanda e-posta / web için çalışır .... teşekkürler adam !!!
İmran Ahmed

1
Vaki gelişmiş özelliklerden bazılarına ihtiyacınız varsa LinkifyCompat kullanın
Vaiden

İyi, <a href...tıklanabilir URL'leri yapar
Pavel

Ayrıca, içindeki tüm "html" etiketlerini de buna göre yapar, örneğin <b> ... </b> vb.
Array

67

HTML benzeri bir bağlantı eklemek istiyorsanız, tek yapmanız gereken:

  • HTML benzeri bir kaynak ekleyin:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • hiçbir bağlantıya özel yapılandırma olmadan görünümünüzü düzene ekleyin:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • TextView'inize program aracılığıyla uygun MovementMethod ekleyin:

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

Bu kadar! Ve evet, "autoLink" ve "linksClickable" gibi seçeneklerin yalnızca açık bağlantılar üzerinde (html etiketlerine sarılmamış) çalışması benim için çok yanıltıcı ...


2
+1 Haklısın. Eşleşmesi için kendinize bir desen girme seçeneği olmalıdır. Bu şekilde oldukça aptal.
schlingel

47

Bu satırı aşağıdakilere ekledim TextView: android:autoLink="web"
Aşağıda bir düzen dosyasında kullanım örneği verilmiştir.

layout.xml örneklem

    <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

Aşağıdakiler, bir Android uygulamasında metin ve köprü kombinasyonu arayan herkes için çalışmalıdır.

İçinde 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>

Şimdi bunu stringherhangi bir şekilde kullanabilirsiniz 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"/>

Şimdi, Faaliyetinizde veya Parçanızda aşağıdakileri yapın:

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

Şimdiye kadar, bu yaklaşımı ayarlamanıza android:autoLink="web"veya android:linksClickable="true"kullanmanıza gerek yoktur .

Umarım bunu faydalı bulursun.


Bu iyi çalışıyor, ancak açılan webden geri bastığınızda, sadece tarayıcıyı kapatın, ancak uygulamaya geri dönmeyin.
Jachumbelechao Unto Mantekilla

27

Umarım bu sana yardımcı olmuştur;

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
Harika çalışıyor. Ayrıca emin kaldırmak yapmak android:autoLink=?, hesabınızla ilgili TextView.
sulai

Sonunda benim için işe yarayan buydu. Geçerli HTML ve kullanmamak android:autoLink=?önemlidir!
Neal Sanche

Xamarin için, kelime gösterilir ancak altı çizilmez ve yukarıdaki parametreler kullanılarak DEĞİL tıklatılamaz: autoLink, linksClickable
maxweber

Xamarin için bunları ayarlamak ve Metin ayarlamak veya TextFormatted ayarı da kelimeyi verir ancak tıklanabilir veya mavi / altı çizili değildir. Otomatik Bağlantı'nın kaldırılması da başarısız olur. Yalnızca bağlantıları kaldırma Clickable da başarısız olur. Her ikisinin de kaldırılması başarısız olur.
maxweber

helloWorld.TextFormatted = Html.FromHtml (linkURL); bunlar olan ve olmayanlar da başarısız olur. (bağlı değil, mavi değil, tıklanamıyor)
maxweber

25

Bunu xml'de metin görünümüne eklemek için neye ihtiyacınız var?

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

24

Benim için en kolay şey Linkify kullanmak

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

metin görünümündeki metinden web URL'lerini otomatik olarak algılar.


Doğru, ancak tıklanamayacaklar.
FractalBob

Bağlantılar tıklanabilir.
Octavian Ionel

19

Richard, bir dahaki sefere, bu kodu bunun yerine XML düzeninde TextView altına eklemelisiniz.

android:autoLink="all"

Bu böyle olmalı.

<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());Bağlantının tıklanabilir olması için bu kodu ( ) kullanmanıza gerek yoktur .

Ayrıca, gerçek şu: autoLink ve linksClickable'ı ayarladığınız sürece , tıklanabilir bağlantının çalışması için bunu String.xml dosyasına eklemeyi unutmayın .

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

3
Benim için çalışmıyor. Bağlantı gerçekten tıklanabilir, ancak yalnızca "Google" değil, tüm dize görüntülenir. Aslında, buradaki cevapların hiçbiri veya bunların kombinasyonu şu ana kadar işe yaramıyor.
Violet Zürafa

Cihazınız veya emülatörünüz İnternet etkin ve AÇIK (wifi) olarak ayarlanmış mı veya LAN bağlı mı, @Violet Giraffe?
David Dimalanta

Bu. Ben sadece XML niteliklerini kullanarak tıklanabilir yapmayı asla başaramadı, bunun için Java kod başvurmak zorunda kaldı. Bu hiç önemli değil, ama hoş değil.
Violet Zürafa

18

kullanarak Linkify : Linkify metin ve normal ifadenin bir parça alıp tıklanabilir bağlantılar içine metinde Normal ifade eşleşirse tüm döner

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

Unutma

import android.widget.TextView;

16

Telefon ve url'yi textView'den seçilebilir hale getirmek için çok tek bir çizgi android kodu Ne dize ve ne veri olursa olsun. Bunun için herhangi bir HTML etiketi kullanmanıza gerek yoktur.

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

Bunu kullanarak fark android:autoLink="web"böylece

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

URL'ler için uygun çalıştı ancak bağlamak istediğim bir e-posta adresim ve telefon numaram olduğu için bu satırı android:autoLink="all"bu şekilde kullandım

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

ve bir cazibe gibi çalıştı.


13

Linkify metnini de yönet resim açıklamasını buraya girin

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

Emin olun değil kullanmak setAutoLinkMask(Linkify.ALL)kullanırken setMovementMethod(LinkMovementMethod.getInstance())ve Html.fromHTML()düzgün biçimlendirilmiş üzerinde HTML(örneğin bağlantılar <a href="http://www.google.com/">Google</a>).


10

Bunu kullan...

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

                });

ve manifest dosyasına izin ekleyin

<uses-permission android:name="android.permission.INTERNET"/>

1
Bu işe yarayacaktır, ancak uygulamanın bu tıklanabilir TextView ötesinde İnternet iznine ihtiyacı olmayabileceğini unutmayın. Belki bu durumlarda aşırıya kaçma
Jose_GD

2
Soruyla gerçekten ilgili mi?
Darpan

2
Bu soru ile ilgili değildi.
afollestad

1
Bu asla başarısız olmayacak!
Skynet

Tam URL yerine sadece bağlantı metni göstermemize izin verdiği için bu yöntemi beğendim. Bağlantı metni ayrıca yeşil renkli ve altı çizili olarak da şekillendirilebilir.
kayıp bebek

10

Sadece buna ihtiyacınız var:

android:autoLink="web"

Bu satırı, web'e referansla tıklanabilen TextView'e ekleyin. URL adresi, bu TextView öğesinin metni olarak ayarlandı.

Misal:

 <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

Kabul edilen cevap doğrudur, ancak telefon numaralarının, haritaların, e-posta adreslerinin ve normal bağlantıların, örneğin http://google.comhref etiketleri olmadan, daha az xml'de otomatik bağlantıya sahip olamayacağınız anlamına gelmeyeceği anlamına gelir .

Bulduğum HER ŞEY tıklanabilir olması için tek tam çözüm şudur:

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

Ve TextView OLMAMALIDIR android:autolink. İkisine de gerek android:linksClickable="true"yok; varsayılan olarak doğrudur.


benim için bu olmadan çalıştı, kabul edilen cevap iyi çalıştı @Kelly sorunu var android sürümü ve cihaz söyleyebilir?
Akhil Baba

myapp://Şemalar için çalışmaz (Derin Bağlantı için).
CoolMind

7

Bir TextView'de tıklanabilir ve Görünür bağlantıları nasıl çözdüm (koda göre)

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

ancak metni görmek istiyorum ve metne tıkladığınızda bağlantıya yönlendirilir (tarayıcı tarafından açılır)? Bu çözüm bunu çözmez, değil mi?
Duc Tran

6

Aşağıdaki kodu kullanın:

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 dizenizi arka uçtan veya kaynak dosyalarınızdan alabilirsiniz. Metninizi kaynak dizesi olarak koyarsanız, CDATAetiketi eklediğinizden emin olun :

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

Ardından kodda dizeyi almanız ve HTML olarak atamanız ve bir bağlantı hareketi yöntemi ayarlamanız gerekir:

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

Sorunu yaşamanızın nedeni, yalnızca "açık" adreslerle eşleşmeye çalışmasıdır. "www.google.com" veya " http://www.google.com " gibi şeyler " .

Metninizi Html.fromHtml () ile çalıştırmak hile yapmalıdır. Programlı olarak yapmalısınız, ama işe yarıyor.


2
TextView içindeki bağlantılar, dizedeki diğer metinden farklı bir renk olduğundan, bağlantılar olarak tanındıklarını düşünüyorum. Tıklanabilir değiller :-(
Richard

4

Başka bir cevap eklemeye değip değmeyeceğini bilmiyorum, ama ne olur ne olmaz ...

Bunu birkaç yerde avlamak zorunda kaldım ama sonunda kodun bu sürümünü çalışmak için aldım.

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 () içinde):

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

Bu, metne sahip link text1ve link text2kullanıcıyı google'a yönlendiren iki tıklanabilir köprü oluşturur .


4

Otomatik bağlantı telefonu benim için çalışmıyor. Aşağıdaki bir cazibe gibi çalıştı,

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 tabanlı TextView kullanıyorsanız, gereksiniminiz için sadece iki şey yapmanız gerekir:

  1. Dizede "bu benim Web Sayfam" gibi bağlantınızı belirleyin. Bunu xml veya koda ekleyebilirsiniz.

  2. TextView olan xml'ye şunu ekleyin:


android:linksClickable="true"

android:autoLink="web"

4

Dize kaynağınıza CDATA ekleyin

strings.xml

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

3

Metnin "otomatik altını çizmek" için autolink'i kullanıyorum, ama sadece onu yöneten bir "onClick" yaptım. (Bu problemle kendim karşılaştım)

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

Bu kaynakları yöneten uygulamalara (IE tarayıcısı) niyetinizi ilettiğiniz için herhangi bir izin gerekmez.

Benim için işe yarayan buydu. İyi şanslar.


Tıklanabilir bir bağlantı yapmıyorsunuz, tüm TextView'i tıklanabilir hale getiriyorsunuz ... Bu soru değil.
clauziere

Kabul edildi, ancak bazen işe yarayan bir geçici çözüm aynı şeydir. En popüler yanıtın yazılmasından 5 yıl sonra, bu hala bir problemdi ve aynı problemi yaşadığım 6 ay sürdü, ancak farklı ama çalışan bir çözümle sonuçlandı.
onaclov2000

2

Sadece getString (R.string.whatever) yerine getText (R.string.whatever) kullanmanız gerektiğini anlamak için çok zaman harcadım ...

Her neyse, işte benimkini böyle çalıştırıyorum. Aynı metin görünümünde birden çok köprü ile.

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

dize örneği

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>

Bu çok daha basit ve kullanımı kolaydır. Bu nedenle dinamik olarak eklenen bir TextView çalışan özel metin ile birden çok bağlantı var. Bunun için mümkün olan en fazla oyu gerekir. Yayılmış dizeler, özel TextViews ve HtmlCompat.fromHtml yöntemleri üzerinde başımı kırıyorum. Çok teşekkür ederim @ luca992.
Parth Patel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.