Pertanyaan Bagaimana cara saya membuat tautan dalam TextView yang dapat diklik?


Saya telah mendefinisikan TextView berikut:

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

dimana @string/txtCredits adalah sumber daya string yang berisi <a href="some site">Link text</a>.

Android menyorot tautan di TextView, tetapi tidak merespons klik. Bisakah seseorang memberi tahu saya apa yang saya lakukan salah? Apakah saya harus mengatur 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>

Tetapi ini tidak:

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

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


819
2018-04-29 01:41


asal


Jawaban:


Dimakamkan di 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 di 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 memecahkannya. Cukup sulit untuk mengungkap dan memperbaikinya.

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


1088
2018-04-30 18:18



Saya hanya menggunakan android:autoLink="web" dan itu berfungsi dengan baik. Sebuah klik pada tautan membuka browser dan menunjukkan halaman yang benar.

Satu hal yang dapat saya duga adalah bahwa beberapa pandangan lain berada di atas tautan. Sesuatu yang transparan mengisi seluruh orang tua tetapi tidak menampilkan apa pun di atas tautan. Dalam hal ini, klik pergi ke tampilan ini alih-alih tautan.


459
2018-04-29 07:13



Setelah menghabiskan waktu dengan ini, saya telah menemukan bahwa:

  • android:autoLink="web" berfungsi jika Anda memiliki tautan lengkap dalam HTML Anda. Hal-hal berikut 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 (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 uraian tautan (bagian di antara tag) itu sendiri bukanlah tautan. android:autoLink="web" tidak TIDAK bekerja dengan tautan semacam itu.

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

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


294
2017-12-17 23:45



Solusi di atas tidak bekerja untuk saya, tetapi yang berikut (dan tampaknya sedikit lebih bersih).
Pertama, dalam sumber daya string, tentukan chevrons pembuka tag Anda menggunakan enkode 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, encode semua chevrons dalam string seperti itu. BTW, tautan harus dimulai dengan http://

Kemudian (seperti yang disarankan sini) atur opsi ini pada 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 ada regex atau hacks manual lainnya yang diperlukan.


84
2018-04-12 13:58



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

  • tambahkan string seperti HTML sumber daya:

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

     <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 "tautOtomatis" dan "tautklik" yang hanya berfungsi pada tautan eksplisit (tidak dibungkus dengan tag html) sangat menyesatkan bagi saya juga ...


56
2018-06-29 10:10



Saya menggunakan ini dengan sederhana

Linkify.addLinks(TextView, Linkify.ALL);

membuat tautan dapat diklik diberikan sini


56
2018-03-26 13:00



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

layout.xml mencicipi

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

41
2018-06-18 06:14



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

23
2018-05-08 11:00



Hanya apa yang Anda perlukan untuk menambahkan ini dalam tampilan teks dalam xml

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

22
2018-04-25 03:20