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

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

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

(0)

相关推荐

  • Android中TextView自动识别url且实现点击跳转

    前言 在项目中要在展示展示的文字中,自动匹配url 并且点击实现跳转,看了很多第三方的感觉都很复杂.后来自己写了一个简单的. 实现代码如下 1.创建一个继承UITextView的CjTextView . import <UIKit/UIKit.h> @interface CjTextView : UITextView @end import "CjTextView.h" @interface CjTextView () @property (nonatomic, copy

  • Android TextView中文本点击文字跳转 (代码简单)

    在web页面中,有a标签的超链接实现跳转,同样在Android当中,用TextView控件来显示文字,实现它的事件来跳转. 用过微博Android手机端的朋友的都知道微博正文有时有一些高亮显示的文本,如话题.提到的人等等,当点击这些文本时会跳到另外一个页面(即另一个activity),下面就要来模仿微博的这个功能 点击#hello# 点击@人 一.新建一个名为WeiboContentTest的工程 二.在布局文件中添加一个textview 三.在mainactivity中创建该textview

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

    本文实例为大家分享了TextView部分文字可点击跳转的具体代码,供大家参考,具体内容如下 效果图: 需求:每个item的文字都有两部分是连接可点击 当然需要用到SpannableString和ClickableSpan. import android.text.TextPaint; import android.text.style.ClickableSpan; import android.view.View; import com.xuehu365.xuehu.App; import co

  • Android 中TextView的使用imageview被压缩问题解决办法

    Android 中TextView的使用imageview被压缩问题解决办法 看下运行效果图: 今天解bug的时候遇到一个奇怪的问题:listview的item由一个textview和一个imageview组成,父布局是线性水平排列.我的本意是imageview显示相同的图片,textview显示文本,但是运行程序后发现,当某个textview的文本较多时,imageview会被压缩,刚开始没注意,检查代码了好久. 代码示例如下: <!--文本少的item--> <LinearLayou

  • Android中TextView局部变色功能实现

    在做项目的时候,遇到过一行文字有两种颜色.在菜鸟的时候直接会想到用多个TextView来实现.后来自己学的多了就找到了更为简单的方法了. 直接上代码: 方法一: xml代码片段: <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> Java代码片段: TextView tv=

  • Android中TextView自动适配文本大小的几种解决方案

    目录 TextView文本大小自动适配与TextView边距的去除 一.Autosizing的方式(固定宽度) 二.自定义View的方式(固定宽度) 三.使用工具类自行计算(非控件固定宽度) 四.去除TextView的边距 总结 TextView文本大小自动适配与TextView边距的去除 标题太难取了,其实本文主要就是讲如何控制文本大小,让其自动适配宽度,其次我们还需要精准控制Text的高度和宽度间距等属性. 一般我们的布局都是分 match parent 和 wrap content 而他们

  • Android中TextView实现垂直滚动和上下滚动效果

    布局里面就是两个自定义的TextView,上面的左右滑动的是AutoHorizontalScrollTextView; 下面上下滚动的是AutoVerticalScrollTextView; 上面左右滑动的非常好实现,直接把AutoHorizontalScrollTextView复制到项目中,复制全类名到布局文件中,和系统TextView一样,只需设置文本其他什么都不用设置: 下面垂直滚动的AutoVerticalScrollTextView相比AutoHorizontalScrollTextV

  • Android中TextView显示插入的图片实现方法

    本文实例讲述了Android中TextView显示插入的图片实现方法.分享给大家供大家参考,具体如下: Android系统默认给TextView插入图片提供了三种方式: 1.ImageSpan 2.Html.ImageGetter 3.TextView.setCompoundDrawables(left, top, right, bottom) 1.TextView使用ImageSpan显示图片 ImageSpan span = new ImageSpan(this, R.drawable.ic

  • Android中TextView动态设置缩进距离的方法

    需求是需要在TextView前端加入一个标签展示. 最终效果图如下: 根据效果图,很容易就能想到使用SpannableStringBuilder,在这里使用到的就是LeadingMarginSpan这个类了. 官方说明: A paragraph style affecting the leading margin. There can be multiple leading margin spans on a single paragraph; they will be rendered in

  • Android 中自定义Dialog样式的Activity点击空白处隐藏软键盘功能(dialog不消失)

    一.需求触发场景: 项目中需要开发带有EditText的Dialog显示,要求在编辑完EditText时,点击Dilog的空白处隐藏软键盘.但是Dialog不会消失.示例如下: 二.实现方法: 发布需求时,我个人曾想过直接通过new的方式直接创建Dialog,经过多次尝试,无法实现要求,所以采用将Activity设置为Dialog样式进行展示,调用方法实现需求.具体实现如下: 本次演示示例的工程结构: 2.1AndroidMainfest.xml配置文件 需要在配置文件中将需要显示为dialog

  • Android中自定义ImageView添加文字说明详解

    前言 大家应该都有所体会,在android开发中,需要展示图片的地方有很多..正常情况下展示一张图片的时候还需要在下面添加一个文字说明..我们也可以用布局ImageView+TextView来实现..最常见的就是底部菜单,或者顶部菜单...图标下面还要添加一个文字说明...重复多次使用ImageView+TextView来实现会感觉有点麻烦.. 下面就介绍一个简易的图片+文字的简单控件,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 上效果图 效果图 下面我们开始撸代码. MyI

随机推荐