首先要想实现文字变色以及点击,都需要使用到SpannableStringBuilder,实例化该类也很简单,只需将你想要处理的字符串当做参数

SpannableStringBuilder spannable = new SpannableStringBuilder(content);

那么下边便是开始实现文字变色了,调用SpannableStringBuilder的setSpan方法,该方法有四个参数:

Object what: 设置的span类型,颜色,粗体,下划线等等

int start: 开始作用的索引,包括start,索引从0开始

int end: span结束作用的索引,不包括end

int flags: 有四个取值,分别表示是否作用于span范围前后新增的字符

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,前后都不作用

Spannable.SPAN_EXCLUSIVE_INCLUSIVE,后面作用

Spannable.SPAN_INCLUSIVE_EXCLUSIVE,前面作用

Spannable.SPAN_INCLUSIVE_INCLUSIVE,前后都作用

可以这样区分,SPAN之后第一个字母是前,第二个字母是后,EXCLUSIVE不包括,INCLUSIVE包括.

spannable.setSpan(newForegroundColorSpan(Color.RED),startIndex,endIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(spannable);

接下来是指定文字的点击事件设置,步骤与设置文字变色基本相同,只需要ClickableSpan这个类来处理点击事件,我们先写一个类,继承ClickableSpan
private class TextClick extends ClickableSpan{ @Override public void onClick(View widget) { //在此处理点击事件 } }
接下来又是setSpan这个方法,但第一个参数换成我们继承ClickableSpan类的实例化,其它三个参数同上,需要注意的是setMovementMethod这个方法一定要记得设置,不然点击是不会生效的

//这个一定要记得设置,不然点击不生效textView.setMovementMethod(LinkMovementMethod.getInstance());spannable.setSpan(new TextClick(),startIndex,endIndex , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

那么接下来出现了一个问题,我既要让文字可点击,但是又要指定它的颜色该怎么办呢。我们查看ClickableSpan的源码会发现,它除了onClick之外,还有updateDrawState

@Override public void updateDrawState(TextPaint ds) {     ds.setColor(ds.linkColor);     ds.setUnderlineText(true); }

它的实现很简单,一目了然,就是设置文字颜色以及是否有下划线。那么这个问题就迎刃而解了,在我们的TextClick重写updateDrawState,即是

private class TextClick extends ClickableSpan{ @Override public void onClick(View widget) {      //在此处理点击事件 } @Override public void updateDrawState(TextPaint ds) {       ds.setColor(Color.RED);    } }
SpannableStringBuilder builder = new SpannableStringBuilder(textView.getText().toString());    //ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色  ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);  ForegroundColorSpan whiteSpan = new ForegroundColorSpan(Color.WHITE);  ForegroundColorSpan blueSpan = new ForegroundColorSpan(Color.BLUE);  ForegroundColorSpan greenSpan = new ForegroundColorSpan(Color.GREEN);  ForegroundColorSpan yellowSpan = new ForegroundColorSpan(Color.YELLOW);        builder.setSpan(redSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  builder.setSpan(whiteSpan, 1, 2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);  builder.setSpan(blueSpan, 2, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  builder.setSpan(greenSpan, 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  builder.setSpan(yellowSpan, 4,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    

设置文字部分颜色的第二种方法:

String str = "这是"+""+"改变的颜色"+"";tv.settxt(Html.fromHtml(str));

案例:

// 设置agree textview        String str = getResources().getString(R.string.t_register_tip7);        SpannableStringBuilder spannable = new SpannableStringBuilder(str);        //spannable.setSpan(new ForegroundColorSpan(Color.RED),34,38, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);        spannable.setSpan(new TextClick(), 34, 38, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);        m_tvTip3.setMovementMethod(LinkMovementMethod.getInstance());        m_tvTip3.setText(spannable);
private class TextClick extends ClickableSpan{    @Override    public void onClick(View widget) {        //在此处理点击事件        Intent intent = new Intent(m_context, PrivacyPolicyActivity.class);        // 开启新的Activity,关闭当前Activity        startActivity(intent);        // 切换动画,向左方向推进        overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);    }    @Override    public void updateDrawState(TextPaint ds) {        ds.setColor(Color.RED);    }}

完!!!

更多相关文章

  1. 对Android之事件分发机制的理解
  2. Android(安卓)简单自定义对话框:语言切换
  3. 获取Android所有的应用和包名 点击跳转已安装应用
  4. 【Android】ImageButton的记录
  5. 关于android中alarm的使用
  6. Android(安卓)Room 框架学习
  7. Android(安卓)搜索框:SearchView 的属性和用法详解
  8. android ListView+CheckBox实现单选
  9. Android在诸如editText等组件设置输入法半屏幕显示的说明

随机推荐

  1. vue常用术语、样式与事件绑定 与 列表渲
  2. PDO登录实战完善请求分发器小结
  3. nginx光速入门到进阶
  4. 淘宝首页商品列表
  5. npm 安装与删除包的常用操作及 node中的
  6. Vue常用术语,样式绑定与事件绑定,列表渲染
  7. 演示vue常用术语、演示样式与事件绑定 、
  8. ev4视频格式如何转成mp4格式 ,ev4破解工
  9. 1.vue常用术语 2. 样式与事件绑定 3. 列
  10. 【视频版】最新版PyCharm 2021.3.3 激活