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

Android TextView 自定义ClickableSpan实现@ 超链接

2016-03-17 21:22 267 查看
Textview能满足简单的文字展示,其中可以设置自动索引链接,邮箱等。但有时候我们需要对TextView进行更丰富的展现原本的就很难满足需求。例如各种标注,特殊文字高亮,关键字链接。

项目中需要用到对@用户的链接。所以楼主就去研究了一下Textview。结果发现使用Spannable接口能很好的实现对textview的拓展。而且android SDK提供了很多实现类。

先看一下如下代码

//创建一个 SpannableString对象
SpannableString sp = new SpannableString(“谷歌超链接、高亮显示、高亮1、高亮2、斜体、下划线.”);
//设置超链接
sp.setSpan(new URLSpan(“http://www.google.com”), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置高亮样式一
sp.setSpan(new BackgroundColorSpan(Color.RED), 11, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置高亮样式二
sp.setSpan(new ForegroundColorSpan(Color.YELLOW), 15, 18, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//设置斜体
sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 19, 21, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//设置下划线
sp.setSpan(new UnderlineSpan(), 22, 25, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

sdk里面提供了很多span你可以使用。下面说一下楼主需要微博@高亮实现
ClickableSpan
从名字就会发现这是一个响应文字点击的span,这是一个抽象类,你需要实现该类的onclick方法代码如下:
你也可以复写updateDrawState方法对文字的外观进行一点修改。
class WeiboAtClickSpan extends ClickableSpan {

@Override
public void onClick(View arg0) {
//响应文字点击事件
}

@Override
public void updateDrawState(TextPaint ds) { super.updateDrawState(ds);

//设置没有下划线
ds.setUnderlineText(false);
//设置颜色高亮

ds.setARGB(255, 0, 71, 112);
}

}
当然使用方法跟上面的示例代码一样给textview设置span,通过setspan的参数你可以发现要指定startindex和endindex,这样我们就可以在一段文字中通过制定的start和end给这段文字的不同位置设置span。从而就可以组合出丰富的textview展现了。当然edittext也支持这些接口,下面读者就自己去制造轮子吧。
当然最后不要忘了给textview设置值

//
SpannableString对象设置给TextView

spannableTextView.setText(sp);

//
设置TextView中的超链接可点击

spannableTextView.setMovementMethod(LinkMovementMethod.getInstance());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: