Android中TextView实现部分文字可点击跳转

所属分类: 软件编程 / Android 阅读数: 52
收藏 0 赞 0 分享

本文实例为大家分享了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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多