Android TextView自定义实现@用户跳转

Android TextView自定义实现@用户跳转

转自:

kingjxl2006的博客

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

你可能感兴趣的:(Android,TextView)