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());
项目中需要用到对@用户的链接。所以楼主就去研究了一下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小知识库(转)
- Android应用图标替换
- Android手机_软件安装目录
- Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述
- Android--数据解析
- Android案例练习(一)——智能机器人
- Android学习笔记——项目结构及相关基础知识
- Android学习笔记——TextInputLayout
- Admob for Android不显示
- Android Studio 2.0 beta 7 发布
- Android 中关与类转换异常的问题。
- Android异步消息处理机制Handler完全解析
- 学习android笔记(2):通知(Notification)的新用法
- jni中出现使用LOGD,出现undefined reference to '__android_log_print错误
- android纠正知识点
- Android中软解码和硬解码的优先级
- 自定义Android标题栏修改TitleBar的布局
- Android Adapter深入理解与优化
- Android开发将流读取成String返回的工具类
- Android用Intent切换Activity无反应