效果图:

需求:每个item的文字都有两部分是连接可点击

当然需要用到SpannableString和ClickableSpan。

import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View; import com.xuehu365.xuehu.App;
import com.xuehu365.xuehu.R; /**
* Created by Administrator on 2017/10/11.
*/
public class RecordClickSpan extends ClickableSpan {
@Override
public void onClick(View widget) { } @Override
public void updateDrawState(TextPaint ds) {
ds.setColor(App.getApplication().getResources().getColor(R.color.c0066CC));
ds.setUnderlineText(false);
}
}
private void getRecordContent(BaseViewHolder holder, final StudyLogModel logModel) {
TextView record = holder.getView(R.id.record);
String courseName = !TextUtils.isEmpty(logModel.getCourseTitle()) ? "《" + logModel.getCourseTitle() + "》" : "";
String lessonName = ":《" + (!TextUtils.isEmpty(logModel.getSourceTitle()) ? logModel.getSourceTitle() + "》" : logModel.getLessonTitle() + "》");
SpannableString courseSpannable = new SpannableString(courseName);
SpannableString lessonSpannable = new SpannableString(lessonName);
RecordClickSpan courseSpan = new RecordClickSpan() {
@Override
public void onClick(View widget) {
URLBus.doURL("http://www.baidu.com", "", context);
}
};
RecordClickSpan lessonSpan = new RecordClickSpan() {
@Override
public void onClick(View widget) {
URLBus.doURL("http://www.taobao.com", "", context);
}
};
courseSpannable.setSpan(courseSpan, 0, courseName.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
lessonSpannable.setSpan(lessonSpan, 0, lessonName.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
switch (Integer.parseInt(logModel.getSourceType())) {
case CoursePlanAdapter.VIDEO_LIVE:
case CoursePlanAdapter.VIDEO_RECODE:
record.append("观看");
record.append(courseSpannable);
record.append("的视频");
record.append(lessonSpannable);
break;
case CoursePlanAdapter.VOICE_LIVE:
case CoursePlanAdapter.VOICE_RECODE:
record.append("收听");
record.append(courseSpannable);
record.append("的语音");
record.append(lessonSpannable);
break;
case CoursePlanAdapter.TEACH_FACE:
record.append("在");
record.append(courseSpannable);
record.append("的面授课时");
record.append(lessonSpannable);
record.append("签到成功");
break;
case CoursePlanAdapter.SURVEY:
record.append("完成");
record.append(courseSpannable);
record.append("的调研");
record.append(lessonSpannable);
break;
case CoursePlanAdapter.EXAM:
record.append("完成");
record.append(courseSpannable);
record.append("的考试");
record.append(lessonSpannable);
break;
case CoursePlanAdapter.WORK:
record.append("完成");
record.append(courseSpannable);
record.append("的作业");
record.append(lessonSpannable);
break;
case CoursePlanAdapter.ARTICLE:
record.append("阅读");
record.append(courseSpannable);
record.append("的文章");
record.append(lessonSpannable);
break;
case CoursePlanAdapter.FILE:
record.append("下载");
record.append(courseSpannable);
record.append("的文档");
record.append(lessonSpannable);
break;
default:
record.append("完成");
record.append(courseSpannable);
record.append("的");
record.append(lessonSpannable);
break;
}
record.setMovementMethod(LinkMovementMethod.getInstance());
}

注意:

1.继承ClickableSpan用来改链接颜色和去掉下划线

2.文字的每个部分的链接都要单独生成一个SpannableString和ClickableSpan,然后对应的setSpan

3.特别特别要注意的是!TextView最后append的时候一定要分别进行,不能一起append,这个坑花了我好些时间

比如:

-----------错误
record.append("观看"+courseSpannable+"的视频"+lessonSpannable); -----------正确
record.append("观看");
record.append(courseSpannable);
record.append("的视频");
record.append(lessonSpannable);

TextView部分文字可点击跳转的更多相关文章

  1. Android开发UI之textview实现高亮显示并点击跳转

    textview实现高亮显示,带下划线,带背景,主要是通过SpannableString类实现. 具体实现请看代码: TextView showMoreContent=(TextView)findvi ...

  2. Android TextView部分文字实现点击事件

    This is the class for text whose content and markup can both be changed. (这是一个内容和标记都可以更改的文本类) 快速实现 直 ...

  3. 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应

    超文本:http://www.baidu.com 这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“http://www.baidu.com” 并且要求红色字体的部分可以 ...

  4. Android TextView 嵌套图片及其点击,TextView 部分文字点击,文字多颜色

    1. TextView 中嵌套图片的方法 TextView textView... textView.setText("..."); textView.append(Html.fr ...

  5. iOS开发小技巧 - label中的文字添加点击事件

    Label中的文字添加点击事件 GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction 以前老师讲过类似的功能,自己懒得回头看了,找了 ...

  6. html锚点 点击跳转到页面指定位置

    本来是在看阮大神写的ajax教程,突然发现点击目录文字会跳转到相对应的文本内容,于是乎激发了我的兴趣. 这个究竟怎么做的,刚开始看的时候一知半解,找度娘就是:"点击跳转到页面指定位置&quo ...

  7. Android开发欢迎页点击跳过倒计时进入主页

    没点击跳过自然进入主页,点击跳过之后立即进入主页     1.欢迎页布局activity_sp.xml放一张背景图(图片随你便啦)再放一个盛放倒计时的TextView   <?xml versi ...

  8. Android Studio计时跳转或点击跳转至主页面

    这个总体来说是比较简单的,计时跳转一般调用Android Studio中的Handler方法. 一.发生点击事件跳转页面 mBtnTextView = (Button) findViewById(R. ...

  9. Setting 之dashboard 点击跳转流程

    设置的主界面的可以通过修改xml中的dashboard_categaries.xml 文件实现,在DashboardSummary.java 文件中的rebuildUI()方法中将xml对应的实体类转 ...

随机推荐

  1. K8S Link

    https://www.cnblogs.com/linuxk/p/9783510.html https://www.cnblogs.com/fengzhihai/p/9851470.html

  2. Tensorflow模型变量保存

    Tensorflow:模型变量保存 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献Tensorflow实战Google深度学习框架 实验平台: Tensorflow1.4.0 pyt ...

  3. ictclas bug修复

    大体上参考链接:http://blog.csdn.net/luojinping/article/details/8788743 最后注意下SegTag.java文件 public SegTag(int ...

  4. html中<meta>标签

    这个是html文档一般都有的元素. 1. 介绍 元素基本所有浏览器都支持,它提供页面的元信息,比如描述.关键字.web服务等 位于文档头部的内部,将以名称/值对出现 2. 属性 注意:如果没有name ...

  5. Grass is Green

    Root    3719 - Grass is Green Time limit: 3.000 seconds This year exactly n <tex2html_verbatim_ma ...

  6. 【BZOJ】4764: 弹飞大爷 LCT

    [题意]给定n个数字ai,表示大爷落到i处会被弹飞到i+ai处,弹飞到>n或<1处则落地.m次操作,修改一个ai,或询问大爷落到x处经过几次落地(或-1).n,m<=10^5,|ai ...

  7. Python :集合类型(set)

    set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引.分片等序列的操作. 一.初始化 s0 = set() d0 = {} s1 = {0} ...

  8. javashop每次重新部署都要从新安装的问题

    javashop每次重新部署都要从新安装的问题 发现一个问题就是用MyEclipse是部署不上的,用eclipse才行. 这个问题的关键在于javashop有好多文件都是动态生成的,好多配置文件也是在 ...

  9. MongoDB之数据库命令操作(二)

    现在详细学习一下mongodb的数据库操作. 查询语句 db.xxx(集合name).find() # 查询 db.xxx(集合name).findOne() # 只返回一个 db.xxx(集合nam ...

  10. C++ 内联函数inline

    http://blog.csdn.net/u011327981/article/details/50601800 1.  内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: 复制代码 代码 ...