TextView部分文字可点击跳转
效果图:

需求:每个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部分文字可点击跳转的更多相关文章
- Android开发UI之textview实现高亮显示并点击跳转
textview实现高亮显示,带下划线,带背景,主要是通过SpannableString类实现. 具体实现请看代码: TextView showMoreContent=(TextView)findvi ...
- Android TextView部分文字实现点击事件
This is the class for text whose content and markup can both be changed. (这是一个内容和标记都可以更改的文本类) 快速实现 直 ...
- 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应
超文本:http://www.baidu.com 这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“http://www.baidu.com” 并且要求红色字体的部分可以 ...
- Android TextView 嵌套图片及其点击,TextView 部分文字点击,文字多颜色
1. TextView 中嵌套图片的方法 TextView textView... textView.setText("..."); textView.append(Html.fr ...
- iOS开发小技巧 - label中的文字添加点击事件
Label中的文字添加点击事件 GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction 以前老师讲过类似的功能,自己懒得回头看了,找了 ...
- html锚点 点击跳转到页面指定位置
本来是在看阮大神写的ajax教程,突然发现点击目录文字会跳转到相对应的文本内容,于是乎激发了我的兴趣. 这个究竟怎么做的,刚开始看的时候一知半解,找度娘就是:"点击跳转到页面指定位置&quo ...
- Android开发欢迎页点击跳过倒计时进入主页
没点击跳过自然进入主页,点击跳过之后立即进入主页 1.欢迎页布局activity_sp.xml放一张背景图(图片随你便啦)再放一个盛放倒计时的TextView <?xml versi ...
- Android Studio计时跳转或点击跳转至主页面
这个总体来说是比较简单的,计时跳转一般调用Android Studio中的Handler方法. 一.发生点击事件跳转页面 mBtnTextView = (Button) findViewById(R. ...
- Setting 之dashboard 点击跳转流程
设置的主界面的可以通过修改xml中的dashboard_categaries.xml 文件实现,在DashboardSummary.java 文件中的rebuildUI()方法中将xml对应的实体类转 ...
随机推荐
- 写文章 使用conda管理python环境
使用conda管理python环境
- 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】
--------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...
- python列表排序方法reverse、sort、sorted
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- 使用itextpdf提取pdf内容
package test; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList ...
- 如何在AngularJS渲染后再加载JS
http://www.itnose.net/detail/6100484.html app.directive('repeatDone', function () { return function ...
- 始终要重载toString
本文涉及到的概念 1.重载toString方法的意义 2.两个注意事项 1.重载toString方法的意义 重载toString,返回关于当前实例的描述信息.这在调试错误,打印实例信息时,可以带来 ...
- Palindromic Squares 回文平方数
1.2.4 Palindromic Squares 回文平方数 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 139 Solved: 66[Submit ...
- SDUT 3929
Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...
- ubuntu永久修改主机名
1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法:其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后:其二,在终端窗口中输入命令:hostname ...
- Nginx实现404页面的几种方法【转】
一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看. 第一种:Nginx自己的错误页面 Nginx访问一个静态的html 页面,当这个页面没 ...