Android開發技巧——去掉TextView中autolink的下劃線
阿新 • • 發佈:2019-01-02
我們知道,在佈局檔案中設定textview的autolink及其型別,這時textivew上會顯示link的顏色,並且文字下面會有一條下劃線,表示可以點選。而在我們在點選textview時,應用將根據我們所設定的型別跳轉到對應的介面。但是有時,我們因介面需求,需要去掉介面上顯示的下劃線,並保持功能不變。
如果已經設定了autolink,那麼在textview當中再去設定TextPaint為無下劃線是無效的,我們可以看URLSpan所繼承的類ClickableSpan類的原始碼,如下:
public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance { /** * Performs the click action associated with this span. */ public abstract void onClick(View widget); /** * Makes the text underlined and in the link color. */ @Override public void updateDrawState(TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText(true); } }
可以看到在這裡它是重新設定為有下劃線的。
所以要解決這個問題,就只有再設定一個沒有下劃線的Spannable物件。
首先,繼承一個CharacterStyle或其已實現的子類,重寫updateDrawState方法,程式碼如下:
/*
* Date: 14-9-4
* Project: Access-Control-V2
*/
package cn.irains.access.v2.common;
import android.text.TextPaint;
import android.text.style.UnderlineSpan;
/**
* 無下劃線的Span
* Author: msdx ( [email protected])
* Time: 14-9-4 上午10:43
*/
public class NoUnderlineSpan extends UnderlineSpan {
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);
ds.setUnderlineText(false);
}
}
然後在textview設定了內容之後,呼叫以下的程式碼,設定一個span:
如果你是在listview中使用,並且用了holder,則span物件建立一個就可以了,然後在呼叫了setText之後再重新設定一遍span。這樣textview在介面上就不會有下劃線了,但卻保留著autolink的功能。NoUnderlineSpan mNoUnderlineSpan = new NoUnderlineSpan(); if (textview.getText() instanceof Spannable) { Spannable s = (Spannable) textview.getText(); s.setSpan(mNoUnderlineSpan, 0, s.length(), Spanned.SPAN_MARK_MARK); }