Android TextView自定义实现@用户跳转
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 {
@Overridepublic void onClick(View arg0) {//响应文字点击事件}
@Overridepublic 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());