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 ...
随机推荐
- crm2011js操作选项卡和节点
CRM窗口选项卡的操作 crm2011节点的操作
- opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/ 原理: glPushMat ...
- arm+linux 裸机环境搭建之安装工具篇(eclipse)
之前已经讲述如何安装gcc和gdb,在此不赘述! 一.所需要的软件有两个: jre-7u25-linux-i586.rpm(虚拟机) eclipse-cpp-kepler-R-linux-gtk .t ...
- ORACLE AWR概述及生成AWR报告
1.Overview of the Automatic Workload Repository The Automatic Workload Repository (AWR) collects, pr ...
- golang基础数据结构
一.概述: 这里主要讨论四种类型---数组.slice.map和结构体 数组和结构体是聚合类型:它们的值都是由很多个元素或者成员字段的值组成.数组是有同构元素组成--每个数组的元素的类型相同:结构体为 ...
- last reboot
last reboot是一个linux命令,查看上次重启时间等相关信息
- jQuery Tags Input Plugin 插件的使用
一个jquery开发的标签功能加强插件,可以生成或删除标签,还能对输入重复标签进行检查,和JQuery autocomplete插件配合实现自动完成功能. 官网:http://xoxco.com/pr ...
- win server 2003 将MBR转为GPT突破硬盘2TB的限制(附微软磁盘科普)
备注:https://technet.microsoft.com/zh-cn/library/cc773223.aspx GUID 分区表 与支持最大卷为 2 TB (terabytes) 并且每个磁 ...
- js问题学习
1.前言为了node.js做准备,js的基本功还是很重要的.所以正值1024程序员节的时候所以找了些题目,整理了一下知识点.这篇文章感觉代码太多,难免枯燥,所以文章最后留了个彩蛋给读者. 2.简单回调 ...
- java Timer 使用小结
Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务.这种方式可以让程序按照某一个频度执行,但不能指定时间运行.用的较少. 任务的调用通过起的子线程进 ...