Membuat Link Pada TextView Android

Tutorial android kali ini, tentang cara membuat link pada TextView. Bagi anda yang belum tahu, TextView juga menerima text berupa HTML. Membuat link di TextView ini gampang-gampang susah, ada sedikit trik yang harus diberikan.

Free Image Hosting at www.ImageShack.us

Cara membuat link di TextView cukup sederhana, yaitu dengan memanfaatkan Html.fromHtml():

StringBuilder html = new StringBuilder();
html.append( "Contoh klik, buka <a href='http://bayu.freelancer.web.id/'>URL</a>" );
html.append( " dan " );
html.append( "<a href='lauch.TCActivity://Kode?param1=isi-param'>Activity</a>" );

textView.setText( Html.fromHtml( html.toString() ) );

Perhatikan, bahwa ada dua model href yang saya gunakan. Penggunaan pertama, seperti sebagaimana kita biasanya menggunakan link di web. Apabila link tersebut di-click, maka akan membuka browser. Sedangkan cara kedua, akan dijelaskan nanti di bawah.

Potongan kode ini, kalau dijalankan, masih belum bisa membuat link pada TextView bisa di-click. Masih perlu ditambah sedikit kode:

textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());

setClickable(true) membuat TextView bisa di-click. Tapi, apa yang mau di-click? Karena kita ingin membuat link, dan link ini ingin agar bisa di-click, maka kita jelaskan dengan menggunakan setMovementMethod(LinkMovementMethod). Sekarang, link sudah bisa di-click.

Kita kembali ke cara penggunaan kedua. Cara ini cukup berguna bila kita ingin link yang di-click nanti, membuka activity baru. Cara penggunaan (selain dengan membuat link, tentunya) adalah dengan menambahkan definisi Activity baru di AndroidManifest.xml.

<activity android:name="TCActivity">
	<intent-filter>
		<category android:name="android.intent.category.DEFAULT" />
		<action android:name="android.intent.action.VIEW" />
		<data android:scheme="lauch.TCActivity" />  
	</intent-filter>            
</activity>

Penjelasan kode di atas adalah, activity TCActivity akan dijalankan, bila menerima data dari skema URL lauch.TCActivity. Skema URL ini, diperoleh dari setting href yang kita berikan di HTML.

Kalau sudah bisa membuka Activity, lantas bagaimana kita mendapatkan informasi parameter dan lainnya dari URL tersebut? Jawabannyak cukup sederhana, cukup dengan menggunakan Activity.getIntent().getData(). Sebagai contoh, untuk URL berikut:

lauch.TCActivity://Kode?param1=isi-param

Maka, kita bisa memperoleh informasi dengan cara:

Uri data = getIntent().getData();
Log.i( "LOG", "FULL URI: " + data.toString());
Log.i( "LOG", "QUERY: " + data.getQuery());
Log.i( "LOG", "HOST:" + data.getHost());
Log.i( "LOG", "PARAM1:" + data.getQueryParameter( "param1" ));

Yang hasilnya adalah:

FULL URI: lauch.TCActivity://Kode?param1=isi-param
QUERY: param1=isi-param
HOST: Kode
PARAM1: isi-param


Author: Arief Bayu Purwanto

Hello, my name is Arief Bayu Purwanto, a 24 years old father of a beautiful daughter. Interested in online programming, linux, games, and reading. Currently working on kapanlagi.com as junior developer. I live in a relatively quite and cool place called Malang. I'm available for some freelance stuff as well as some consulting job. You can see my portofolio for some previous task I've finished and some other information related to my capability. Btw, I'm plurking here.

  • Juragan Topi

    mas,,klo untuk membuat textview html bagaimana yah,,udah nyari gak ketemu2 solusinya :(
    jadi biar rapi, ada paragraf,bold, dll.
    klo boleh shareing ilmunya ya mas,,terima kasih :)

  • Richard

    mas, saya ikutin langkah” seperti diatas bisa, tp cara meng-enter tulisannya gmn mas?
    itu tulisannya nyambung terus , saya gunain “n” gak mau enter

    klu tau saran atau tipsnya kasi tau ya, terima kasih

  • Ardhy Richard Seran

    mas, sy punya satu textview yang isinya penggalan teks lagu seperti berikut :
    A E
    Country roads, take me home,
    F#m D
    To the place I belong
    A E
    West Virginia, mountain momma,
    D A
    Take me home, country roads.

    kode untuk textviewnya : txtLirik.setText(Html.fromHtml(song.isi_songs).toString());// saya ngambil data isi_song dari web service.
    pertanyaanya : bagaimana agar saya dapat memproses baris akord saja tanpa menghilangkan baris liriknya.
    terima kasih .