วิธีง่ายๆ อย่างเหลือเชื่อในการสร้างลิงก์ที่คลิกได้ภายใน TextView
ในขณะที่สร้าง Talon สำหรับ Twitter หนึ่งในสิ่งที่ยากที่สุดที่ฉันพบคือการสร้างลิงก์ที่คลิกได้เหล่านี้ตามข้อความเฉพาะ โชคดีที่ฉันได้ทำให้มันง่ายสำหรับทุกคนที่จะใช้สไตล์ประเภทนี้กับ TextView
ของพวกเขา
เช่นเดียวกับที่ผู้เล่นรายใหญ่ทำ (Google+, Twitter, ไอ Talon ไอ ) ไลบรารีนี้ช่วยให้คุณสร้างลิงก์ที่คลิกได้สำหรับการรวมกันของ String
ภายใน TextView
TextView
ของคุณString
เดี่ยว s หรือใช้นิพจน์ทั่วไปเพื่อตั้งค่าลิงก์ที่คลิกได้ไปยังข้อความใดๆ ที่สอดคล้องกับรูปแบบนั้น ข้อได้เปรียบหลักในการใช้ไลบรารีนี้เหนือฟังก์ชันลิงก์อัตโนมัติของ TextView
คือคุณสามารถลิงก์อะไรก็ได้ ไม่ใช่แค่ที่อยู่เว็บ อีเมล และหมายเลขโทรศัพท์ นอกจากนี้ยังมีการปรับแต่งสีและการตอบสนองต่อการสัมผัสอีกด้วย
มีสองวิธีในการใช้ไลบรารีนี้:
นี่เป็นวิธีที่ต้องการ เพียงเพิ่ม:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
กับการพึ่งพาโครงการของคุณและรัน gradle build
หรือ gradle assemble
ดาวน์โหลดซอร์สโค้ดและนำเข้าเป็นโปรเจ็กต์ไลบรารีใน Eclipse โครงการมีอยู่ใน ไลบรารี โฟลเดอร์ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำเช่นนี้ โปรดอ่านที่นี่
ฟังก์ชันการทำงานสามารถพบได้ใน MainActivity ของตัวอย่าง Kotlin สำหรับ Java ให้ตรวจสอบ JavaMainActivity
หากต้องการดูรายการนิพจน์ทั่วไปที่ฉันใช้ใน Talon คุณสามารถไปที่นี่
// 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
คุณยังสามารถสร้าง CharSequence
แทนการสร้างและใช้ลิงก์กับ TextView
ได้โดยตรง อย่าลืมตั้งค่าวิธีการเคลื่อนไหวบน TextView
ของคุณหลังจากที่คุณใช้ CharSequence
ไม่เช่นนั้นลิงก์จะไม่สามารถคลิกได้
// 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 ());
หากคุณต้องการตั้งค่าสีข้อความเริ่มต้นสำหรับลิงก์โดยไม่ต้องป้อนด้วยตนเองบนออบเจ็กต์ Link
แต่ละรายการ คุณสามารถตั้งค่าได้จากธีมกิจกรรม
< 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 >
ไลบรารีนี้สร้างขึ้นบน Kotlin ดังนั้นคุณจะได้รับวิธีการขยายบางอย่างที่คุณสามารถใช้เพื่อนำลิงก์ไปยัง TextView
แทนที่จะสร้างตัวสร้าง
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
ตามค่าเริ่มต้น LinkBuilder
จะใช้กิจกรรมการสัมผัสทั้งหมดบน TextView
ของคุณ ซึ่งหมายความว่า ListView.OnItemClickListener
จะไม่ถูกเรียกหากคุณพยายามนำไปใช้ การแก้ไขนี้คือการใช้ LinkConsumableTextView
แทนที่จะเป็น TextView ปกติในเลย์เอาต์ของคุณ
LinkConsumableTextView
ของฉันจะใช้เฉพาะกิจกรรมการสัมผัสหากคุณคลิกลิงก์ภายใน TextView
มิฉะนั้น ระบบจะเลื่อนเหตุการณ์การสัมผัสไปที่พาเรนต์ ซึ่งอนุญาตให้คุณใช้เมธอด ListView.OnItemClickListener
โปรดแยกพื้นที่เก็บข้อมูลนี้และสนับสนุนกลับโดยใช้คำขอดึง สามารถขอคุณสมบัติโดยใช้ปัญหาได้ โค้ด ความคิดเห็น และคำวิจารณ์ทั้งหมดได้รับการชื่นชมอย่างมาก
สามารถดูบันทึกการเปลี่ยนแปลงฉบับเต็มสำหรับห้องสมุดได้ที่นี่
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.