Cara yang sangat mudah untuk membuat tautan yang dapat diklik dalam TextView
.
Saat membuat Talon untuk Twitter, salah satu hal tersulit yang saya temui adalah membuat tautan yang dapat diklik berdasarkan teks tertentu. Untungnya, saya telah memudahkan siapa pun untuk menerapkan gaya jenis ini ke TextView
mereka.
Mirip dengan cara semua pemain besar melakukannya (Google+, Twitter, uhuk Talon uhuk ), perpustakaan ini memungkinkan Anda membuat tautan yang dapat diklik untuk kombinasi String
apa pun dalam TextView
.
TextView
AndaString
tunggal atau gunakan ekspresi reguler untuk menyetel tautan yang dapat diklik ke teks apa pun yang sesuai dengan pola tersebut Keuntungan utama menggunakan perpustakaan ini dibandingkan fungsionalitas tautan otomatis TextView
adalah Anda dapat menautkan apa pun, bukan hanya alamat web, email, dan nomor telepon. Ini juga menyediakan penyesuaian warna dan umpan balik sentuhan.
Ada dua cara untuk menggunakan perpustakaan ini:
Ini adalah cara yang disukai. Cukup tambahkan:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
ke dependensi proyek Anda dan jalankan gradle build
atau gradle assemble
.
Unduh kode sumber dan impor sebagai proyek perpustakaan di Eclipse. Proyek ini tersedia di folder perpustakaan . Untuk informasi lebih lanjut tentang cara melakukan ini, baca di sini.
Fungsionalitas dapat ditemukan di MainActivity contoh Kotlin. Untuk Java, periksa JavaMainActivity.
Untuk daftar ekspresi reguler yang saya gunakan di Talon, Anda bisa buka di sini
// Create the link rule to set what text should be linked.
// can use a specific string or a regex pattern
Link link = new Link ( "click here" )
. setTextColor ( Color . parseColor ( "#259B24" )) // optional, defaults to holo blue
. setTextColorOfHighlightedLink ( Color . parseColor ( "#0D3D0C" )) // optional, defaults to holo blue
. setHighlightAlpha ( .4f ) // optional, defaults to .15f
. setUnderlined ( false ) // optional, defaults to true
. setBold ( true ) // optional, defaults to false
. setOnLongClickListener ( new Link . OnLongClickListener () {
@ Override
public void onLongClick ( String clickedText ) {
// long clicked
}
})
. setOnClickListener ( new Link . OnClickListener () {
@ Override
public void onClick ( String clickedText ) {
// single clicked
}
});
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// create the link builder object add the link rule
LinkBuilder . on ( demoText )
. addLink ( link )
. build (); // create the clickable links
Anda juga dapat membuat CharSequence
alih-alih membuat dan menerapkan tautan langsung ke TextView
. Jangan lupa untuk mengatur metode pergerakan pada TextView
Anda setelah Anda menerapkan CharSequence
, atau tautannya tidak akan dapat diklik.
// find the text view. Used to create the link builder
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// Add the links and make the links clickable
CharSequence sequence = LinkBuilder . from ( this , demoText . getText (). toString ())
. addLinks ( getExampleLinks ())
. build ();
demoText . setText ( sequence );
// if you forget to set the movement method, then your text will not be clickable!
demoText . setMovementMethod ( TouchableMovementMethod . getInstance ());
Jika Anda ingin mengatur warna teks default untuk link tanpa menginputnya secara manual pada setiap objek Link
, maka dapat diatur dari tema aktivitas.
< style name = " LinkBuilderExampleTheme " parent = " android:Theme.Holo.Light " >
< item name = " linkBuilderStyle " >@style/LinkBuilder</ item >
</ style >
< style name = " LinkBuilder " >
< item name = " defaultLinkColor " >#222222</ item >
< item name = " defaultTextColorOfHighlightedLink " >#444444</ item >
</ style >
Pustaka ini dibuat di Kotlin, sehingga Anda mendapatkan beberapa metode ekstensi yang bisa Anda gunakan untuk menerapkan tautan ke TextView
, alih-alih membuat pembuatnya.
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
Secara default, LinkBuilder
akan menggunakan semua peristiwa sentuh di TextView
Anda. Artinya ListView.OnItemClickListener
tidak akan pernah dipanggil jika Anda mencoba mengimplementasikannya. Cara mengatasinya adalah dengan mengimplementasikan LinkConsumableTextView
daripada TextView normal di tata letak Anda.
LinkConsumableTextView
saya hanya akan menggunakan peristiwa sentuh jika Anda telah mengeklik tautan di dalam TextView
. Jika tidak, acara sentuh akan ditangguhkan ke induknya, sehingga Anda dapat menggunakan metode ListView.OnItemClickListener
.
Silakan fork repositori ini dan berkontribusi kembali menggunakan permintaan tarik. Fitur dapat diminta menggunakan isu. Semua kode, komentar, dan kritik sangat dihargai.
Log perubahan lengkap untuk perpustakaan dapat ditemukan di sini.
Copyright 2015 Luke Klinker
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.