Android SpannableString详细解析

mTextView.setText(spannableString);

ForegroundColorSpan:前景色,也就是对文字上色,颜色设置为GREEN,start为4,end为7,应该是“陈奕迅”三个字显示为绿色,看一下实际效果

在这里插入图片描述

BackgroudColorSpan 背景色


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.GREEN);

spannableString.setSpan(backgroundColorSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

BackgroudColorSpan:与ForegroundColorSpan类似,对文字背景上色

在这里插入图片描述

ClickableSpan 点击事件


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

ClickableSpan clickableSpan = new ClickableSpan() {

@Override

public void onClick(View widget) {

Toast.makeText(MainActivity.this, “如果我是陈奕迅”, Toast.LENGTH_SHORT).show();

}

@Override

public void updateDrawState(TextPaint ds) {

ds.setUnderlineText(false);

}

};

spannableString.setSpan(clickableSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setMovementMethod(LinkMovementMethod.getInstance());

mTextView.setText(spannableString);

ClickableSpan:是一个抽象类,实现可点击效果,可以重写onClick方法实现点击事件,这里点击“陈奕迅”三个字简单地弹toast

在这里插入图片描述

URLSpan 超链接


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

URLSpan urlSpan = new URLSpan(“https://www.baidu.com/s?ie=UTF-8&wd=陈奕迅”);

spannableString.setSpan(urlSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setMovementMethod(LinkMovementMethod.getInstance());

mTextView.setText(spannableString);

URLSpan:实现超链接的效果,继承于ClickableSpan,点击实现跳转到浏览器

在这里插入图片描述

MaskFilterSpan 模糊 浮雕


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

MaskFilterSpan embossMaskFilterSpan =

new MaskFilterSpan(new EmbossMaskFilter(new float[]{10, 10, 10}, 0.5f, 1, 1));

spannableString.setSpan(embossMaskFilterSpan, 0, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(1.5f);

spannableString.setSpan(relativeSizeSpan, 0, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

MaskFilterSpan blurMaskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(10, Blur.NORMAL));

spannableString.setSpan(blurMaskFilterSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

MaskFilterSpan:构造方法接受MaskFilter作为参数,其中它有两个子类:EmbossMaskFilter和BlurMaskFilter

EmbossMaskFilter实现浮雕效果

EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius)

  • direction:float数组,定义长度为3的数组标量[x,y,z],来指定光源的方向

  • ambient:环境光亮度,0~1

  • specular:镜面反射系数

  • blurRadius:模糊半径,必须>0

BlurMaskFilter实现模糊效果

BlurMaskFilter(float radius, Blur style)

  • radius:模糊半径

  • style:有四个参数可选

  • BlurMaskFilter.Blur.NORMAL:内外模糊

  • BlurMaskFilter.Blur.OUTER:外部模糊

  • BlurMaskFilter.Blur.INNER:内部模糊

  • BlurMaskFilter.Blur.SOLID:内部加粗,外部模糊

在这里插入图片描述

RelativeSizeSpan 字体相对大小


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(1.5f);

spannableString.setSpan(relativeSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

RelativeSizeSpan:设置字体的相对大小,这里设置为TextView大小的1.5倍,看图

在这里插入图片描述

AbsoluteSizeSpan 字体绝对大小


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40, true);

spannableString.setSpan(absoluteSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

AbsoluteSizeSpan:设置字体的相绝对大小,40表示文字大小,true表示单位为dip,若为false则表示px

在这里插入图片描述

ScaleXSpan 字体x轴缩放


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

ScaleXSpan scaleXSpan= new ScaleXSpan(1.5f);

spannableString.setSpan(scaleXSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

ScaleXSpan:设置字体x轴缩放,1.5表示x轴放大为1.5倍,效果如图

在这里插入图片描述

StyleSpan 样式


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);

StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC);

StyleSpan boldItalicSpan = new StyleSpan(Typeface.BOLD_ITALIC);

spannableString.setSpan(boldSpan, 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

spannableString.setSpan(italicSpan, 2, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

spannableString.setSpan(boldItalicSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

StyleSpan:设置文字样式,如斜体、粗体

在这里插入图片描述

TypefaceSpan 字体


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

TypefaceSpan monospace = new TypefaceSpan(“monospace”);

TypefaceSpan serif = new TypefaceSpan(“serif”);

TypefaceSpan sans_serif = new TypefaceSpan(“sans-serif”);

spannableString.setSpan(monospace, 0, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

spannableString.setSpan(serif, 2, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

spannableString.setSpan(sans_serif, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

TypefaceSpan:设置文字字体类型,如monospace、serif和sans-serif等等

在这里插入图片描述

TextAppearanceSpan 文字外貌


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(this, android.R.style.TextAppearance_Material);

spannableString.setSpan(textAppearanceSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

TextAppearanceSpan:设置文字外貌,通过style资源设置,这里使用系统的style资源

在这里插入图片描述

UnderlineSpan 下划线


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

UnderlineSpan underlineSpan = new UnderlineSpan();

spannableString.setSpan(underlineSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

UnderlineSpan:设置文字下划线,强调突出文字时可以使用该span

在这里插入图片描述

StrikethroughSpan 删除线


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

StrikethroughSpan strikethroughSpan = new StrikethroughSpan();

spannableString.setSpan(strikethroughSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

StrikethroughSpan:设置文字删除线

在这里插入图片描述

SuperscriptSpan 上标


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

SuperscriptSpan superscriptSpan = new SuperscriptSpan();

RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.8f);

spannableString.setSpan(relativeSizeSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

spannableString.setSpan(superscriptSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

mTextView.setText(spannableString);

SuperscriptSpan:设置文字为上标

在这里插入图片描述

SubscriptSpan 下标


SpannableString spannableString = new SpannableString(“如果我是陈奕迅”);

SubscriptSpan subscriptSpan = new SubscriptSpan();

RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.8f);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-sLpXxllQ-1715330804413)]

[外链图片转存中…(img-ImTFojLy-1715330804414)]

[外链图片转存中…(img-qHDysqAL-1715330804418)]

[外链图片转存中…(img-Y3xFpiKN-1715330804419)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值