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


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.tvContent); final SpannableStringBuilder style = new SpannableStringBuilder(); //设置文字
style.append("注册即为同意《某某某协议》"); //设置部分文字点击事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "触发点击事件!", Toast.LENGTH_SHORT).show();
}
};
style.setSpan(clickableSpan, 7, 13, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(style); //设置部分文字颜色
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));
style.setSpan(foregroundColorSpan, 7, 13, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //配置给TextView
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(style);
}

简单介绍一下SpannableStringBuilder,这个类实际上就是对你的TextView中的文字进行简单的配置,配置好你想要的属性后,直接调用下面代码即可:

//设置光标如何移动计量的方法
textView.setMovementMethod(LinkMovementMethod.getInstance());
//配置给TextView
textView.setText(style)
如何进行各个属性的配置呢?我们以字体设置颜色为例:

//设置部分文字颜色

//创建字体颜色的Span,并初始化字体颜色属性
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));
//我们设置第7~13个中间的字符为蓝色
style.setSpan(foregroundColorSpan, 7, 13, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

SpannableStringBuilder和SpannableString主要通过使用setSpan(Object what, int start, int end, int flags)改变文本样式。

setSpan()方法对应的参数如下:

start: 指定Span的开始位置
end: 指定Span的结束位置,并不包括这个位置。
flags:取值有如下四个
Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式
Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式
Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括
Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括
详细实现方式都已经在【Android】强大的SpannableStringBuilder @带心情去旅行 中有很清楚的讲解,大家去原作者家查阅即可。

 

Android TextView部分文字实现点击事件的更多相关文章

  1. Android TextView中链接(link)点击事件的截取

    布局文件xml <TextView package com.jayce.testlink; import android.net.Uri; import android.os.Bundle; i ...

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

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

  3. Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  4. TextView中的部分文字响应点击事件

    TextView是android常用的控件,经常要显示不同文字的大小,颜色,......今天要实现这样这样一个需求,TextView某段内容显示的文字颜色不一样,并且点击区域只能是改变了颜色的字. 1 ...

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

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

  6. Android菜鸟成长记4-button点击事件

    Button 1.button按钮的创建 一般来说,在我们新建一个Android项目的时候,会有会默认有一个activity_main.xml的文件 如果你在新建项目的时候,把Create Activ ...

  7. Android viewpager 嵌套 viewpager滑动 点击事件冲突解决方案

    为了解决这个问题.可以自定义viewpager,然后在里面监听首饰,自定义点击事件 package com.hpuvoice.view; import android.content.Context; ...

  8. TextView设置不同字段不同点击事件

    转载自:http://www.apkbus.com/blog-160625-59265.html package com.example.fortextdemo;   import java.util ...

  9. xamarin.android listview绑定数据及点击事件

    前言 listview是用来显示数据列表的一个控件,今天给大家带来如何使用cursor进行数据绑定以及点击事件. 导读 1.如何创建一个listview 2.如何使用cursor进行绑定数据 3.li ...

随机推荐

  1. Shell 编程 case语句

    本篇主要写一些shell脚本case语句的使用. 字符判断 #!/bin/bash read -p "请输入一个字符:" char case $char in [a-z]|[A-Z ...

  2. win10和linux引导问题(没有系统选择界面)

    由于最近学习嵌入式和c模块化编程,需要使用Linux系统,但是编程之外,WIN10还是主力系统,决定装双系统. 往常一样,百度装双系统方法,网上千篇一律,大都一个套路. 首先,WIN10 下,新开一个 ...

  3. MVC开发中自定义返回类型

    在做项目web的MVC中,会用到返回值的问题,我们一般使用AjaxResult的返回值,根据自己的需要进行自定义,如下参考: using System; using System.Collection ...

  4. 使用JS的 FileReader 读取本地文本文件(可兼容各种浏览器)

    最近需要在客户端操作文件,看到网上有 FileReader 对象,链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 还是直接 ...

  5. oracle-shell备份

    获取PAH写入脚本 cat /home/oracle/.bash_profile 编写脚本oadbbak.sh PATH backuptime=`date +%Y%m%d%H%M%S` exp use ...

  6. CRAP-API——如何在Linux服务器部署CRAP-API教程

    前言 之前一直用的eolinker的免费版,但是人数有限,所以想找个免费开源的API管理平台,然后就选择了CRAP-API. 步骤 部署环境 LNMT部署 我的环境是之前部署的是LNMP,后面又增加的 ...

  7. materialize 读取单选按钮

    $('input[name='xxx']:checked')

  8. python操作excel获取内容

    背景:从excel表中获取请求url.请求数据.请求类型.预期结果 因此,需要学会如何使用python从excel获取这些信息 #coding=utf-8 import xlrd #创建对象时,获取对 ...

  9. 【转】Impala 中的 Invalidate Metadata 和 Refresh

    前言Impala采用了比较奇葩的多个impalad同时提供服务的方式,并且它会由catalogd缓存全部元数据,再通过statestored完成每一次的元数据的更新到impalad节点上,Impala ...

  10. [linux][c/c++]代码片段01

    #include <stdio.h> #include <unistd.h> void usage() { printf("Usage:\n"); prin ...