Bagaimana cara membuat tautan di TextView yang dapat diklik?

1004

Saya memiliki TextView berikut yang ditentukan:

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

di mana @string/txtCreditssumber daya string yang berisi <a href="some site">Link text</a>.

Android menyoroti tautan di TextView, tetapi tautan itu tidak menanggapi klik. Bisakah seseorang memberi tahu saya apa yang saya lakukan salah? Apakah saya harus menetapkan onClickListener untuk TextView dalam aktivitas saya untuk sesuatu yang sesederhana ini?

Sepertinya itu ada hubungannya dengan cara saya mendefinisikan sumber daya string saya. Ini tidak bekerja:

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

Tapi ini memang:

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

Yang menyebalkan karena saya lebih suka menunjukkan tautan teks daripada menampilkan URL lengkap.

Richard
sumber
67
android: autoLink = "web" ini adalah baris utama yang perlu ditambahkan ke xml dan berfungsi seperti mantra. terima kasih @Richard
jeet.chanchawat
1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > gunakan sttring di atas dan berfungsi. Diketahui bahwa string dalam href dan dengan anchor tag harus sama dan memiliki .com atau. * Untuk bekerja perlu memeriksa mengapa
Shaik Khader
<string name = "txtCredits"> Beberapa teks di sini <a href=" google.com"> Google </a> </ string > Untuk cuplikan di atas Klik pada beberapa teks di sini seharusnya tidak berfungsi dalam kasus saya apa yang harus saya lakukan?
Ajay Takur
android:focusable="true"memecahkan masalah saya
Khang .NT

Jawaban:

1228

Terkubur dalam demo API, saya menemukan solusi untuk masalah saya:

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

Saya menghapus sebagian besar atribut pada TextView saya untuk mencocokkan apa yang ada di demo.

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

Itu menyelesaikannya. Cukup sulit untuk dibuka dan diperbaiki.

Penting : Jangan lupa menghapus autoLink="web"jika Anda menelepon setMovementMethod().

Richard
sumber
19
Mungkin hanya saya, tapi mengapa Anda melakukan ini dengan EditText?
Justin
1
Ternyata hanya setMovementMethod yang dibutuhkan untuk mencapai tujuan.
superarts.org
3
Sama seperti sebuah komitmen, saya telah melihat beberapa Samsung Galaxy S3 dengan OS 4.3 yang macet ketika "setMovementMethod (LinkMovementMethod.getInstance ())" digunakan, jadi pertimbangkan saja, saya harus membuat validasi sebelum menambahkannya
Jorge Aguilar
40
Sama disini. Perhatikan bahwa jika setMovementMethod () dipanggil, Anda perlu menghapus autolink = "web" di file XML, atau tautan lain tidak akan berfungsi. Terima kasih atas komentarnya
voghDev
6
Cukup gunakan atribut "autoLink" di xml Anda untuk misalnya: android: autoLink = "web"
Kalpesh
533

Saya hanya menggunakan android:autoLink="web"dan berfungsi dengan baik. Klik pada tautan membuka browser dan menampilkan halaman yang benar.

Satu hal yang bisa saya tebak adalah beberapa pandangan lain ada di atas tautan. Sesuatu yang transparan memenuhi seluruh orangtua tetapi tidak menampilkan apa pun di atas tautan. Dalam hal ini klik menuju ke tampilan ini alih-alih tautan.

Janusz
sumber
3
Menambahkan lebih banyak info di atas. Mungkinkah cara saya mendefinisikan string sebagai <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Sepertinya ini diizinkan tetapi tidak berhasil untuk saya.
Richard
6
jika Anda menggunakan tautan otomatis, Anda tidak memerlukan bagian href. OS akan mengambil string untuk menguraikannya untuk url dan mengonversi setiap url ke tautan yang dapat diklik. Tetapi ini tidak akan menghasilkan kata google yang ditautkan ke google.com. Ini akan menampilkan www.google.com sebagai tautan.
Janusz
menggunakan autolink juga cocok untuk saya, textview tanpa orangtua sama sekali.
euther
2
android: autoLink juga berfungsi bagus untuk menghubungkan nomor telepon, alamat, dan alamat email (atau semua yang di atas).
CloudyMusic
54
Tidak, karena jawaban ini tidak berfungsi jika Anda tidak ingin menggunakan tag jangkar dengan teks tampilan yang berbeda dari URL
cprcrack
375

Setelah menghabiskan waktu dengan ini, saya telah menemukan bahwa:

  • android:autoLink="web"berfungsi jika Anda memiliki tautan lengkap dalam HTML Anda. Berikut ini akan disorot dengan warna biru dan dapat diklik:
  • Beberapa teks <a href="http://www.google.com">http://www.google.com</a>
  • Beberapa teks http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); akan bekerja dengan yang berikut ini (akan disorot dan dapat diklik):
  • Beberapa teks <a href="http://www.google.com">http://www.google.com</a>
  • Beberapa teks http://www.google.com
  • Beberapa teks <a href="http://www.google.com">Go to Google</a>

Perhatikan bahwa opsi ketiga memiliki hyperlink, tetapi deskripsi tautan (bagian di antara tag) itu sendiri bukan tautan. android:autoLink="web"tidak TIDAK bekerja dengan link tersebut.

  • android:autoLink="web"jika diatur dalam XML akan menimpa view.setMovementMethod(LinkMovementMethod.getInstance());(yaitu; tautan dari jenis ketiga akan disorot, tetapi tidak dapat diklik).

Moral cerita ini digunakan view.setMovementMethod(LinkMovementMethod.getInstance());dalam kode Anda dan pastikan Anda tidak memiliki android:autoLink="web"tata letak XML jika Anda ingin semua tautan dapat diklik.

Jeshurun
sumber
setMovementMethod tidak berfungsi dengan opsi kedua yang Anda sebutkan yaitu google.com .. ada pembaruan?
Darpan
16
Terima kasih telah menunjukkan bahwa <a href="http://www.google.com">Go to Google</a>itu tidak akan berfungsi untuk tautan otomatis. Untuk begitu banyak jawaban pada SO, ini adalah satu-satunya yang menyebutkannya. Terima kasih!
cwhsu
Yang ini berhasil. Diuji pada API 29.
Wrichik Basu
96

Solusi di atas tidak bekerja untuk saya, tetapi yang berikut ini berhasil (dan sepertinya sedikit lebih bersih).
Pertama, di sumber string, tentukan chevron pembuka tag Anda menggunakan pengkodean entitas HTML, yaitu:

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

dan tidak:

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

Secara umum, enkode semua chevron dalam string seperti itu. BTW, tautannya harus dimulai denganhttp://

Kemudian (seperti yang disarankan di sini ) setel opsi ini di TextView Anda:

 android:linksClickable="true"

Akhirnya, dalam kode, lakukan:

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

Itu saja, tidak diperlukan regex atau retasan manual lainnya.

Błażej Czapp
sumber
7
Ini akan membuat Parser HTML setiap kali kode ini dieksekusi. Ketahuilah bahwa jika Anda menggunakan ini untuk membuat tautan di dalam item daftar atau di tempat-tempat penting kinerja lainnya di aplikasi Anda. Saat membuat listitem, ini meningkatkan waktu eksekusi getView Methods saya hingga 50%
Janusz
1
Perhatikan juga spasi di URL harus diganti dengan%20
Nicolas Tyler
Anda dapat menghindari masalah pengodean entitas dengan membungkus string Anda dalam <![CDATA[ ... ]]>tag.
Paul Lammertsma
1
BEKERJA untuk saya, terima kasih. Tidak bekerja dengan <![CDATA[...]]>tag.
ricky.tribbia
Ini seharusnya jawabannya! Bekerja dengan sangat baik dengan aplikasi asli saya
Ajay Kulkarni
69

saya menggunakan ini secara sederhana

Linkify.addLinks(TextView, Linkify.ALL);

membuat tautan yang dapat diklik diberikan di sini

jai_b
sumber
4
Jawaban ini adalah yang terbaik. Bekerja pada setiap versi Android dan kita hanya perlu menambahkan metode itu ketika teks di set di TextView. Bonus: memungkinkan kita untuk menambahkan tautan yang dapat dikustomisasi yang dapat diklik
Kerwan
3
Sangat sederhana dan jawaban terbaik. berfungsi untuk email / web pada saat yang sama .... terima kasih man !!!
Imran Ahmed
1
Gunakan LinkifyCompat jika Anda memerlukan beberapa fitur canggih yang lebih baru
Vaiden
Bagus, itu membuat url tanpa <a href...dapat diklik
Pavel
Itu juga membuat semua tag "html" di dalam pekerjaan sesuai, misalnya <b> ... </b> dll.
Array
67

Jika Anda ingin menambahkan tautan seperti HTML, yang perlu Anda lakukan adalah:

  • tambahkan string seperti HTML sumber daya:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • tambahkan tampilan Anda ke tata letak tanpa konfigurasi khusus tautan:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • tambahkan MovementMethod yang sesuai secara terprogram ke TextView Anda:

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

Itu dia! Dan ya, memiliki opsi seperti "tautan otomatis" dan "tautanKlik" yang hanya berfungsi pada tautan eksplisit (tidak terbungkus dalam tag html) juga sangat menyesatkan bagi saya ...

yaitu
sumber
2
+1 Anda benar. Seharusnya ada opsi untuk memasukkan pola diri Anda sehingga ini cocok. Dengan cara ini sangat bodoh.
schlingel
47

Saya menambahkan baris ini ke TextView: android:autoLink="web"
Di bawah ini adalah contoh penggunaan dalam file tata letak.

layout.xml Sampel

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

Berikut ini harus bekerja untuk siapa saja yang mencari kombinasi teks dan hyperlink dalam aplikasi Android.

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

Sekarang Anda dapat memanfaatkan ini stringdalam bentuk Viewseperti ini:

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

Sekarang, di Aktivitas atau Fragmen Anda, lakukan hal berikut:

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

Sekarang, Anda tidak perlu mengatur android:autoLink="web"atau android:linksClickable="true"menggunakan pendekatan ini.

Saya harap Anda akan menemukan ini bermanfaat.

Asesha George
sumber
Ini bekerja dengan baik, tetapi ketika Anda menekan kembali dari web dibuka, hanya tutup browser, tetapi tidak kembali ke aplikasi.
Jachumbelechao Unto Mantekilla
27

Saya harap ini akan membantu Anda;

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
sumber
3
Ini sangat bagus. Pastikan juga Anda menghapus android:autoLink=?dari TextView.
sulai
Inilah yang akhirnya berhasil untuk saya. HTML yang valid dan tidak menggunakan android:autoLink=?itu penting!
Neal Sanche
Untuk Xamarin, kata tersebut menunjukkan tetapi tidak digarisbawahi dan tidak dapat diklik menggunakan parameter di atas dan BUKAN parameter ini: autoLink, linksClickable
maxweber
Untuk pengaturan Xamarin dan pengaturan Teks atau pengaturan TextFormatted juga menghasilkan kata tetapi tidak dapat diklik atau biru / bergaris bawah. Menghapus tautan otomatis juga gagal. Menghapus hanya tautan. Klik juga gagal. Menghapus keduanya juga gagal.
maxweber
helloWorld.TextFormatted = Html.FromHtml (tautanURL); dengan dan tanpa itu juga gagal. (tidak ditautkan, bukan biru, tidak dapat diklik)
maxweber
25

Hanya apa yang Anda butuhkan untuk menambahkan ini dalam tampilan teks di xml

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>
Ahmed Mostafa
sumber
24

Hal termudah yang berhasil bagi saya adalah menggunakan 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);

dan itu akan secara otomatis mendeteksi url web dari teks di tampilan teks.

pks
sumber
Benar, tetapi mereka tidak akan diklik.
FractalBob
Tautan dapat diklik.
Octavian Ionel
19

Richard, lain kali, Anda harus menambahkan kode ini di bawah TextView di tata letak XML sebagai gantinya.

android:autoLink="all"

Ini harusnya seperti ini.

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

Anda tidak perlu menggunakan kode ini (t2.setMovementMethod(LinkMovementMethod.getInstance()); ) untuk membuat tautan dapat diklik.

Juga, inilah kebenaran: selama Anda mengatur tautOtomatis dan linksClickable , jangan lupa untuk menambahkan ini di String.xml file sehingga link diklik akan bekerja.

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
David Dimalanta
sumber
3
Tidak bekerja untuk saya. Tautan memang dapat diklik, tetapi seluruh string ditampilkan, bukan hanya "Google". Faktanya, tidak ada jawaban di sini atau kombinasinya sejauh ini yang berhasil.
Violet Giraffe
Apakah perangkat Anda atau emulator internet diaktifkan dan disetel ke ON (wifi) atau LAN tersambung, @Violet Giraffe?
David Dimalanta
Ini. Saya tidak pernah berhasil membuat tautan yang dapat diklik menggunakan hanya atribut XML, harus menggunakan kode Java untuk itu. Itu bukan masalah besar, tapi tidak baik.
Violet Giraffe
18

dengan menggunakan linkify : Linkify mengambil sepotong teks dan ekspresi reguler dan mengubah semua kecocokan regex dalam teks menjadi tautan yang dapat diklik

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

Jangan lupa

import android.widget.TextView;
DeathRs
sumber
16

Berikut ini adalah kode android satu baris yang membuat ponsel dan url dapat dipilih dari textView, apa pun string dan data. Anda tidak perlu menggunakan tag HTML apa pun untuk ini.

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

Saya perhatikan menggunakan android:autoLink="web"itu

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

berfungsi OK untuk URL tetapi karena saya memiliki alamat email dan nomor telepon yang ingin saya tautkan, saya akhirnya menggunakan baris android:autoLink="all"ini seperti ini

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

dan itu bekerja seperti pesona.

Pembelajar
sumber
13

Kelola Tautan teks Warna Juga masukkan deskripsi gambar di sini

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

Pastikan untuk tidak menggunakan setAutoLinkMask(Linkify.ALL)saat menggunakan setMovementMethod(LinkMovementMethod.getInstance())dan Html.fromHTML()pada HTMLtautan yang diformat dengan benar (misalnya, <a href="http://www.google.com/">Google</a>).

sebelas lima
sumber
10

Gunakan ini...

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

                });

dan tambahkan izin dalam file manifes

<uses-permission android:name="android.permission.INTERNET"/>
Tej
sumber
1
Ini akan berhasil, tetapi ingatlah bahwa aplikasi mungkin tidak memerlukan izin Internet di luar TextView yang dapat diklik ini. Mungkin berlebihan dalam kasus-kasus itu
Jose_GD
2
Apakah itu benar-benar berhubungan dengan pertanyaan?
Darpan
2
Ini tidak relevan dengan pertanyaan.
afollestad
1
Ini tidak akan pernah gagal!
Skynet
Saya suka metode ini karena memungkinkan kita untuk hanya menampilkan teks jangkar daripada URL lengkap. Teks jangkar juga dapat ditata misalnya berwarna hijau dan bergaris bawah.
Bayi yang hilang
10

Anda hanya membutuhkan ini:

android:autoLink="web"

Masukkan baris ini ke TextView, yang bisa diklik dengan referensi ke web. Alamat URL ditetapkan sebagai teks dari TextView ini.

Contoh:

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

Jawaban yang diterima benar, TETAPI itu berarti nomor telepon, peta, alamat email, dan tautan biasa, mis http://google.com Tanpa tag href TIDAK AKAN LAGI yang dapat diklik karena Anda tidak dapat memiliki tautan otomatis dalam xml.

Satu-satunya solusi lengkap untuk memiliki SEMUA yang dapat diklik yang saya temukan adalah sebagai berikut:

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

Dan TextView TIDAK seharusnya android:autolink. Juga tidak perlu android:linksClickable="true"; itu benar secara default.

Kelly McKinnon
sumber
bagi saya itu berhasil tanpa ini, jawaban yang diterima bekerja dengan baik @Kelly dapatkah Anda memberi tahu versi android dan perangkat yang menjadi penyebab masalahnya?
Akhil Dad
Tidak berfungsi untuk myapp://skema (untuk Deep Linking).
CoolMind
7

Inilah cara saya memecahkan tautan yang dapat diklik dan Terlihat dalam TextView (dengan kode)

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
sumber
tapi saya ingin melihat teks dan ketika mengklik teks itu mengarahkan ulang ke tautan (dibuka oleh browser)? Solusi ini tidak menyelesaikannya, bukan?
Duc Tran
6

Gunakan kode di bawah ini:

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

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

Anda bisa mendapatkan string HTML Anda dari backend atau dari file sumber daya Anda. Jika Anda meletakkan teks sebagai string sumber daya, pastikan untuk menambahkan CDATAtag:

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

Kemudian dalam kode Anda perlu mendapatkan string dan menetapkannya sebagai HTML dan mengatur metode gerakan tautan:

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

Alasan Anda mengalami masalah adalah karena ia hanya mencoba mencocokkan alamat "telanjang". hal-hal seperti "www.google.com" atau " http://www.google.com ".

Menjalankan teks Anda melalui Html.fromHtml () harus melakukan trik. Anda harus melakukannya secara terprogram, tetapi berhasil.

Jeremy Logan
sumber
2
Tautan di TextView berwarna berbeda dari teks lain di string, jadi saya pikir mereka dikenali sebagai tautan. Mereka tidak bisa diklik :-(
Richard
4

Tidak tahu apakah perlu menambahkan jawaban lain, tetapi untuk berjaga-jaga ...

Saya harus memburu ini di beberapa tempat tetapi akhirnya kode versi ini berfungsi.

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

Ini akan membuat dua hyperlink yang dapat diklik dengan teks link text1dan link text2yang mengarahkan pengguna ke google.

degausser
sumber
4

Telepon tautan otomatis tidak berfungsi untuk saya. Berikut ini bekerja seperti pesona,

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());
pengguna1995307
sumber
4

Jika menggunakan TextView berbasis XML, untuk kebutuhan Anda, Anda hanya perlu melakukan dua hal:

  1. Identifikasi tautan Anda di string, seperti "ini adalah WebPage saya." Anda bisa menambahkannya dalam xml atau dalam kode.

  2. Di xml yang memiliki TextView, tambahkan ini:


android:linksClickable="true"

android:autoLink="web"
codeFood
sumber
4

Tambahkan CDATA ke sumber daya string Anda

Strings.xml

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

Saya menggunakan tautan otomatis untuk "menggarisbawahi otomatis" teks, tetapi hanya membuat "onClick" yang mengaturnya. (Saya mengalami masalah ini sendiri)

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

Tidak memerlukan izin apa pun, karena Anda mengalihkan niat ke aplikasi yang mengelola sumber daya tersebut, (browser IE).

Inilah yang berhasil bagi saya. Semoga berhasil.

onaclov2000
sumber
Anda tidak membuat tautan yang dapat diklik, Anda hanya menempatkan keseluruhan TextView yang dapat diklik ... Bukan itu pertanyaannya.
clauziere
Setuju, tetapi kadang-kadang solusi yang berhasil, adalah hal yang sama. Jelas 5 tahun setelah jawaban paling populer telah ditulis, ini masih merupakan masalah, dan sudah 6 bulan sejak saya memiliki masalah yang sama, tetapi berakhir dengan solusi yang berbeda tetapi berfungsi.
onaclov2000
2

Hanya membuang begitu banyak waktu untuk mencari tahu Anda harus menggunakan getText (R.string. Apa pun) alih-alih getString (R.string. Apa pun) ...

Ngomong-ngomong, di sinilah cara kerja saya. Dengan beberapa hyperlink dalam tampilan teks yang sama juga.

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

contoh string

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>
luca992
sumber
Ini jauh lebih mudah dan mudah digunakan. Saya memiliki banyak tautan dengan teks khusus yang berfungsi dalam TextView yang ditambahkan secara dinamis karena ini. Ini membutuhkan upvotes paling mungkin. Telah memecahkan kepalaku tentang string Spanned, TextViews kustom dan metode HtmlCompat.fromHtml. Terima kasih banyak @ luca992.
Parth Patel