Android開發技巧——去掉TextView中autolink的下划線


 

我們知道,在布局文件中設置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 (645079761@qq.com)
 * 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:
NoUnderlineSpan mNoUnderlineSpan = new NoUnderlineSpan();
if (textview.getText() instanceof Spannable) {
    Spannable s = (Spannable) textview.getText();
    s.setSpan(mNoUnderlineSpan, 0, s.length(), Spanned.SPAN_MARK_MARK);
}

 

如果你是在listview中使用,並且用了holder,則span對象創建一個就可以了,然后在調用了setText之后再重新設置一遍span。這樣textview在界面上就不會有下划線了,但卻保留着autolink的功能。

 

本文鏈接:http://www.4byte.cn/learning/90271.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM