效果图:

需求:每个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. z-index详细攻略

    概念 z-index 属性设置元素的堆叠顺序.拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面. 层级关系的比较 1. 对于同级元素,默认(或position:static)情况下文档流后面的 ...

  2. Order By 问题集合

    问题(一):Order By 多个参数排序 在做多字段的排序的时候我们经常会会用到该语句. 所以多参数排序是从左到右的局部排序,修改的范围只有前面参数(几个参数)相同的情况下在排序. select * ...

  3. 解决VSCode终端中文乱码问题

    VSCode终端其实调用的是cmd.exe,所以当这里出现中文乱码的时候要解决的是cmd的编码设置问题. 可以通过chcp命令查看cmd的编码设置,GBK2312的代码页编号是936,然后改成utf- ...

  4. Spring Boot 使用IntelliJ IDEA创建一个web开发实例(一)

    .新建项目File-->New-->Project-->Spring Initializr 点击Finish,一个Spring Boot web应用就创建好了.

  5. JVM调优总结(5):典型配置

    以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...

  6. 响应式布局(Responsive Layout)/流式布局(Fluid Layout)/自适应布局(Adaptive)

    1.使用媒体查询来适应不同视口的固定宽度设计,例如bootstrap的container类. 2.将固定像素布局转换成灵活的百分比布局,才能让页面元素根据视口大小在一个又一个媒体查询间伸缩修正样式. ...

  7. JSP和Servlet面试题

    1.讲下servlet的执行流程. Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()<启动顺序根据web.xml里的startup-o ...

  8. tomcat和weblogic的区别

    Tomcat是Apache基金会提供的Servlet容器,它支持JSP, Servlet和JDBC等J2EE关键技术,所以用户可以用Tomcat开发基于数据库,Servlet和JSP页面的Web应用, ...

  9. USB基础介绍

    (转)USB (Universal Serial Bus) 全文地址:http://vlewang.blog.163.com/blog/static/105878151201032804347546/ ...

  10. C#串口serialPort操作

    现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍.例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算机上,那么利用串口通信就可以实现.运行本程序 ...