Android开发技巧——去掉TextView中autolink的下划线

摘要:
如我们所知,如果您在布局文件中设置了自动链接及其文本视图的类型,则链接的颜色将显示在textiw上,并在文本下方放置下划线以指示您可以单击。如果已设置自动链接,则在文本视图中将TextPaint设置为无下划线是无效的。我们可以看到URLSpan继承的ClickableSpan类的源代码,如下所示:publicabstractclassClickableSpandsCharacterStyleimplementsUpdateAppearance{/***执行与此span关联的单击操作。*/publicabstract voidonClick;/***将文本置于链接颜色之下。*/@Overridepublicvoid updateDrawState{ds.setColor;ds.setUnderlineText;}}您可以看到它在这里被重置为下划线。这样,文本视图界面上就不会有下划线,但自动链接的功能将保留。
 

我们知道,在布局文件中设置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

免责声明:文章转载自《Android开发技巧——去掉TextView中autolink的下划线》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Selenium] Selenium WebDriver 的下载和安装FlexCell控件初始化以及加载数据集[原创]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何取消Notepad++红色下划线(错误提示)

Notepad++是个优秀的编辑器,里面有很多插件,但是这些插件主要是针对英文版开发的,如果用中文的注释他就会认为 是错误而出现错误的下划线标识。 这个拼写错误提示的插件一般是为了检测英文的拼写错误,中文的注释它就认为是错误的,出现大量的红色下划线。 关掉这个错误提示插件有两种方法:    1、使用快捷键Alt+a ,即可取消错误提示  2、如图所示,点击...

关于python中带下划线的变量和函数 的意义

总结: 变量: 1. 前带_的变量: 标明是一个私有变量, 只用于标明,外部类还是可以访问到这个变量 2. 前带两个_ ,后带两个_ 的变量: 标明是内置变量, 3. 大写加下划线的变量: 标明是不会发生改变的全局变量 函数: 1. 前带_的变量: 标明是一个私有函数, 只用于标明, 2.前带两个_ ,后带两个_ 的函数: 标明是特殊函数 Pyth...

驼峰与下划线之间的转换

驼峰与下划线之间的转换 /** * */ package com; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * @author xp test5.java 2018年12月27日 */ public class test5 {...

命名规则与代码规范

命名规则 标识符 C++的标识符由字母、数字和下划线组成,其中必须以字母或下划线开头,不能以数字开头。 标识符的长度没有限制,但是对大小写字母敏感。 C++为标准库保留了一些名字,不能使用这些保留字作标识符。 用户自定义的标识符最好不要连续出现两个下划线,也不要以下划线紧连大写字母开头。 基本命名规则 文件命名 文件名全部小写,可以含下划线或连字符,按...

word文档下划线无法显示的解决方法

在编辑文档的时候经常会遇到下划线无法显示的情况,如图: 如果遇到不能在姓名后面加下划线的情况,我们该怎么做? 请看下面的图解: 1、首先点击左上角的office图标 2、点击右下角“word选项” 3、点击“高级”,将右侧进度条拉到最后,找到板式选项,并点击打开 4、打开“板式选项”选项卡之后,往下拉进度条,找到“为尾部空格添加下划线”选项,点击选...

android textView 替文字添加下划线 删除线

android textView 替文字添加下划线 删除线 方法1: tv=(TextView)findViewById(R.id.tv);tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //删除线 //Paint.UNDERLINE_TEXT_FLAG 下划线 //tv.getPaint().s...