TextView 为部分文字添加下划线,并实现单击事件
在开发应用的过程中经常会遇到显示一些不同的字体风格的信息,如关键词高亮显示的等。对于类似的情况,一般我们会想着使用多个TextView去实现,对于每个TextView设置不同的字体风格来满足需求。



int[] indexs = StringUtil.getRepeatIndexs(content, PARAM_FLAG);
int start = 0;
int end = 0;
for (int i = 0; i < indexs.length; i++) {
String text = mTarget.getUserPassage().split(PARAM_SPLIT)[i];
if (null == text || text.equals(" ")) {
text = PARAM_FLAG;
}
end = indexs[i];
mTvQuestion.append(content.substring(start, end));
mTvQuestion.append(Html.fromHtml("<a href=" + end + " >" + text + "</a>"));
start = end + PARAM_FLAG.length();
}
mTvQuestion.append(content.substring(start));
if (mIsExam) {
// 通过setMovementMethod设置LinkMovementMethod类型来使LinkText有效
mTvQuestion.setMovementMethod(LinkMovementMethod.getInstance());
final CharSequence text = mTvQuestion.getText();
if (text instanceof Spannable) {
int length = text.length();
Spannable sp = (Spannable) text;
//获取文本中原有的URLSpan类型的文本,保存起来
URLSpan[] urls = sp.getSpans(0, length, URLSpan.class);
//使用text创建一个SpannableStringBuilder,通过clearSpans()方法清除原有的Span
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.clearSpans();
// 重新设置text中的URLSpan
for (int i = 0; i < urls.length; i++) {
URLSpan url = urls[i];
final int position = i;
final String value = mTarget.getUserPassage().split(PARAM_SPLIT)[i];
style.setSpan(
new ClickableSpan() {
private boolean isClick = false;
private TextPaint ds;
@Override
public void updateDrawState(TextPaint ds) {
if (isClick) {
ds.setColor(Color.GREEN);
} else {
this.ds = ds;
ds.setColor(Color.RED);
}
ds.setUnderlineText(true);
}
@Override
public void onClick(View keyView) {
isClick = true;
//弹出输入对话框
showDialog(content, position, value);
updateDrawState(ds);
}
}, sp.getSpanStart(url), sp.getSpanEnd(url),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mTvQuestion.setText(style);
}
}
该段代码使用ClickableSpan实现点击事件,并且实现超链接单击后变色的功能。注释写的很清楚,相信大家都看的懂,我就不再说明了。

TextView 为部分文字添加下划线,并实现单击事件的更多相关文章
- UILabel,文字添加下划线,中划线
//显示下划线 //中划线 // NSDictionary *attribtDic = @{NSStrikethroughStyleAttributeName: [NSNumber nu ...
- iOS 给UILabel文字加下划线
摘自:http://blog.sina.com.cn/s/blog_6cd380c10101b6hn.html //带下划线的“注” NSMutableAttributedString可变的属性字符串 ...
- iOS开发-UILabel和UIButton添加下划线
关于UILabel和UIButton有的时候需要添加下划线,一般有两种方式通过默认的NSMutableAttributedString设置,第二种就是在drawRect中画一条下划线,本文就简单的选择 ...
- vim显示行号、语法高亮、自动缩进、添加下划线的设置
ubuntu默认是没有安装vim的,所以设置以前请先安装vim:sudo apt-get install vim. 然后 打开vim的配置文件:sudo vim /etc/vim/vimrc 或者 s ...
- Android 给EditText添加下划线
在安卓高版本,默认是有下划线的,其默认下划线的颜色是由其主题颜色来控制的! 控制如下: <style name="AppTheme" parent="Theme.A ...
- IOS UIlabel 、UIButton添加下划线
1.给UILabel 添加下划线 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )]; label.backgrou ...
- UILabel和UIButton添加下划线
关于UILabel和UIButton有的时候需要添加下划线,一般有两种方式通过默认的 NSMutableAttributedString设置,第二种就是在drawRect中画一条下划线,本文就简单的选 ...
- "为文本添加下划线"组件:<u> —— 快应用组件库H-UI
 <import name="u" src="../Common/ui/h-ui/text/c_tag_underline"></impor ...
- Android TextView 添加下划线的几种方式
总结起来大概有5种做法: 1. 将要处理的文字写到一个资源文件,如string.xml(使用html用法格式化) 2. 当文字中出现URL.E-mail.电话号码等的时候,可以将TextView ...
随机推荐
- Iphone JS时间
var end_time = new Date(time).getTime();//月份是实际月份-1 var start_time= new Date(serverTime).getTime(); ...
- android 中动画
详解Android动画之Frame Animation 写出动画效果的xml文件布局基本代码如下: <?xml version="1.0" encoding="ut ...
- [置顶] viewPager控制滑动速度和时间
遇到如下问题:viewpager滑动时如果想跳过很多条直接到最后一条,中间会黑屏.黑屏是因为中间的view没有加载出来的缘故. stackOverflow上看到的解决方案,在这里记录一下, publi ...
- opengl笔记——旋转,一段代码的理解
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...
- javascript设计模式——Module
Module模式是提供公有和私有方法的代码块,有利于封装组织代码,可减少变量及函数名与其它模块的冲突. 推荐阅读: http://www.adequatelygood.com/JavaScript-M ...
- HTTP请求的基本概念 HTTP请求头和响应头的含义
1,HTTP请求的基本概念 TCP/UPD/HTTP *2,HTTP请求头和响应头的含义 请求头: Accept: text/html,image/*(浏览器可以接收的类型) Acc ...
- C#高效分页代码(不用存储过程)
首先创建一张表(要求ID自动编号): create table redheadedfile ( id ,), filenames ), senduser ), primary key(id) ) 然后 ...
- mysql学习(九)sql语句
SQL种类: DDL:数据定义语言 DML:数据操作语言 DQL:数据查询语言 DCL:数据控制语言 DDL: show databases; //查询数据库 create database if n ...
- spring sts 从数据库中反向生成实体类
首先我们要在sts中建立mysql的数据库连接 1. 当点击ok之后,如果没有报错的话就应该是建立好了,我们可以点击查看这个数据库中所有的表 我们就可以再sts进行数据库操作了,具体如下: 点击如下按 ...
- javascript 数据结构和算法读书笔记 > 第四章 栈
1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈p ...