ฉันได้ดำเนินการแก้ปัญหาซึ่งในความคิดของฉันมีความสง่างามมากขึ้น ผมได้ทำที่กำหนดเอง TextView
ด้วยวิธีนี้คุณไม่จำเป็นต้องรันโค้ดพิเศษสำหรับทุก ๆ ที่TextView
มีไฮเปอร์ลิงก์
package com.example.view;
import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.URLSpan;
import android.util.AttributeSet;
import com.example.utils.UrlSpanNoUnderline;
public class TextViewNoUnderline extends AppCompatTextView {
public TextViewNoUnderline(Context context) {
this(context, null);
}
public TextViewNoUnderline(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.textViewStyle);
}
public TextViewNoUnderline(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setSpannableFactory(Factory.getInstance());
}
private static class Factory extends Spannable.Factory {
private final static Factory sInstance = new Factory();
public static Factory getInstance() {
return sInstance;
}
@Override
public Spannable newSpannable(CharSequence source) {
return new SpannableNoUnderline(source);
}
}
private static class SpannableNoUnderline extends SpannableString {
public SpannableNoUnderline(CharSequence source) {
super(source);
}
@Override
public void setSpan(Object what, int start, int end, int flags) {
if (what instanceof URLSpan) {
what = new UrlSpanNoUnderline((URLSpan) what);
}
super.setSpan(what, start, end, flags);
}
}
}
และรหัสสำหรับ UrlSpanNoUnderline:
package com.jankstudios.smmagazine.utils;
import android.text.TextPaint;
import android.text.style.URLSpan;
public class UrlSpanNoUnderline extends URLSpan {
public UrlSpanNoUnderline(URLSpan src) {
super(src.getURL());
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
tel:2125551212
URLnew URLSpanNoUnderline
โทรควรจะผ่านspan.getURL()
การรักษาข้อมูลนี้มิฉะนั้นคุณสร้างการเชื่อมโยงที่ไม่ดีที่ข้อยกเว้นสาเหตุเมื่อคลิก ฉันได้วางโซลูชันที่เสนอนี้ไว้ในคิวแก้ไขสำหรับคำตอบของคุณแล้วเนื่องจากฉันไม่มีสิทธิ์แก้ไขด้วยตนเอง