您的位置:首页 > 移动开发 > Android开发

TextView中autolink的下划线

2017-04-27 15:41 369 查看
布局文件中设置TextView的autolink及其类型,Textivew上会显示link的颜色,对照需求发现文字下面会有一条和字体一样颜色的下划线。在点击Textview时,应用将根据我们所设置的类型跳转到对应的界面。

应需求要求去掉界面上显示的下划线,并保持功能不变。

如果已经设置了autolink,那么在TextView当中再去设置TextPaint为无下划线是无效的,我们可以看URLSpan所继承的类ClickableSpan类的源码,如下:

[java] view
plain copy

 





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);  

    }  

}  

可以看到在这里它是重新设置为有下划线的。于是我们可以重写updateDrawState方法设置一个没有下划线的Spannable对象。

首先,继承一个CharacterStyle或其已实现的子类,重写updateDrawState方法:

[java] view
plain copy

 





/* 

 * Date: 14-9-4 

 * Project: Access-Control-V2 

 */  

package cn.irains.access.v2.common;  

  

import android.text.TextPaint;  

import android.text.style.UnderlineSpan;  

  

/** 

 * Author: LewChich (pykcliuqi@foxmail.com)

 */  

public class NoUnderlineSpan extends UnderlineSpan {
 

    @Override  

    public void updateDrawState(TextPaint ds) {  

        ds.setColor(ds.linkColor);  

        ds.setUnderlineText(false);  

    }  

}  

然后在textview设置了内容之后,实例化,设置一个span:

[java] view
plain copy

 





NoUnderlineSpan mNoUnderlineSpan = new NoUnderlineSpan();  

if (textview.getText() instanceof Spannable) {  

    Spannable s = (Spannable) textview.getText();  

    s.setSpan(mNoUnderlineSpan, 0, s.length(), Spanned.SPAN_MARK_MARK);  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息