Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發技巧——去掉TextView中autolink的下劃線

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

編輯:關於Android編程

我們知道,在布局文件中設置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:

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的功能。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved