位置: 编程技术 - 正文

Android之TextView的样式类Span的使用详解(安卓textview设置文本)

编辑:rootadmin
Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 SpannableString类封装。Android提供了很多的Span的类去实现样式,这个样式都是继承自CharacterStyle类。 要想理解Span的具体使用,那肯定得了解SPan类群的构成,研究代码继承结构,深入的了解、理解,才能更好的使用它。我们来统计一下,最前端的可用功能的SPAN有:URLSpan、ClickableSpan、BackgroundColorSpan、ForegroundColorSpan、MaskFilterSpan、AbsoluteSizeSpan、RelativeSizeSpan、ImageSpan、ScaleXSpan、StyleSpan、SubscriptSpan、SuperscriptSpan、TextAppearanceSpan、TypefaceSpan、RasterizerSpan、StrikethroughSpan、UnderlineSpan。 先看一下Spanable中的常用常量: Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含start和end所在的端点 (a,b) Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b] Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含start,但不包含end所在的端点 [a,b) Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含start和end所在的端点 [a,b]效果图: 用法详解:(使用很简单,所以只简单的解释,直接上代码,看效果)1. SpannableString的使用: 各种的Span就是通过SpannableString来封装样式的,设置完Span之后需要将Span放入到SpannableString类中,然后SpannableString设置到TextView中去。使用: TestText test = (TestText) findViewById(R.id.test); SpannableString spannableString = new SpannableString(testText) ; BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.RED); spannableString.setSpan(backgroundColorSpan, 0, , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) ; test.setText(spannableString) ; 2. BackgroundColorSpan :看名字就知道是跟背景颜色相关的, 使用: BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.RED); spannableString.setSpan(backgroundColorSpan, 0, , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) ; 3. ClickableSpan: 点击事件相关的Span。 代码实现:ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show(); Log.e("Easy", "click"); } }; spannableString.setSpan(clickableSpan, , , Spannable.SPAN_EXCLUSIVE_INCLUSIVE) ; test.setMovementMethod(LinkMovementMethod.getInstance()); 注意:在使用ClickableSpan的时候,在单击链接时凡是有要执行的动作,都必须设置MovementMethod对象。4. URLSpan:链接,类&#;HTML中的a标签。 代码实现: URLSpan urlSpan = new URLSpan(" spannableString.setSpan(urlSpan, , , Spannable.SPAN_INCLUSIVE_EXCLUSIVE) ; UrilSpan是继承自ClickableSpan的,我们可以看一下源码:@Override public void onClick(View widget) { Uri uri = Uri.parse(getURL()); Context context = widget.getContext(); Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); context.startActivity(intent); } URILSpan也是实现了onClick的方法,将URL跳转到浏览器中的。 因此,我们可以通过ClickableSpan去做文字的点击事件。注意:在使用URLSpan的时候,也需要设置MovementMethod对象。5. ForegroundColorSpan :设置字体颜色。代码实现: ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.GRAY); spannableString.setSpan(foregroundColorSpan, , , Spannable.SPAN_INCLUSIVE_INCLUSIVE) ; 6. MaskFilterSpan:文字的装饰效果。分为两种:BlurMaskFilter(模糊效果) 和 EmbossMaskFilter (浮雕效果) MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3)); spannableString.setSpan(maskFilterSpan, , , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) ; MaskFilter filter2 = new BlurMaskFilter(, Blur.OUTER ); MaskFilterSpan maskFilterSpan2 = new MaskFilterSpan(filter2 ); spannableString.setSpan(maskFilterSpan2, , , Spannable.SPAN_EXCLUSIVE_INCLUSIVE) ; 有很陌生的类,我们看一下源码:(BlurMaskFilter) public enum Blur { NORMAL(0), SOLID(1), OUTER(2), INNER(3); Blur(int value) { native_int = value; } final int native_int; } public BlurMaskFilter(float radius, Blur style) { native_instance = nativeConstructor(radius, style.native_int); } private static native long nativeConstructor(float radius, int style); 啊哦,调用的是native的方法,那我们先记住是如何使用的即可,Blur是其内部类,提供了四种样式。有兴趣的可以一一去实验其效果。EmbossMaskFilter是同样的调用native的方法。6. AbsoluteSizeSpan:字体大小的 代码实现: AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan() ; spannableString.setSpan(absoluteSizeSpan, , , Spannable.SPAN_INCLUSIVE_INCLUSIVE) ;具体的看源码其实现: @Override public void updateDrawState(TextPaint ds) { if (mDip) { ds.setTextSize(mSize * ds.density); } else { ds.setTextSize(mSize); } }可以看出来的是,设置的paint的字体大小,构造函数中的 public AbsoluteSizeSpan(int size, boolean dip) dip是标识你传入的数据是否是dp数&#;。7. RelativeSizeSpan:相对的字体大小这个是什么意思那?看源码就知道了:@Override public void updateDrawState(TextPaint ds) { ds.setTextSize(ds.getTextSize() * mProportion); } 原来是字体大小的多少倍啊。8. ImageSpan:有关图片的。代码实现: ImageSpan imageSpan = new ImageSpan(MainActivity.this, R.drawable.ic_launcher) ; spannableString.setSpan(imageSpan, , , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) ; 这个类有很多的构造函数,其作用就是通过不同方式传入drawble,可以资源地址,可以是Drawable 也可以是uri9. ScaleXSpan:横向压缩比例因子。 . StyleSpan :主要由正常、粗体、斜体和同时加粗倾斜四种样式,常量&#;定义在Typeface类中。Typeface.DEFAULT //常规字体类型Typeface.DEFAULT_BOLD //黑体字体类型Typeface.MONOSPACE //等宽字体类型Typeface.SANS_SERIF //sans serif字体类型Typeface.SERIF //serif字体类型. SubscriptSpan: 脚注样式,比如化学式的常见写法,当然,还可以对脚注的文字做一定的缩放看一下源码:SubscriptSpan():无参构造。SubscriptSpan(Parcel src):一参构造,参数src并未起任何作用,源码中为:public SuperscriptSpan(Parcel src) {} 这个是比较特殊的地方。这个构造函数没有任何作用。. SuperscriptSpan:上标样式,比如数学上的次方运算,当然,还可以对上标文字进行缩放。同样式的作用刚好相反。.TextAppearanceSpan:使用style文件来定义文本样式。.TypefaceSpan:字体样式,可以设置不同的字体.RasterizerSpan:设置光栅字样.StrikethroughSpan:删除线.UnderlineSpan : 下划线使用起来是很简单的,主要是分析Span的原理。下一篇文章,来分析Span的深层次源码。

推荐整理分享Android之TextView的样式类Span的使用详解(安卓textview设置文本),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓设置textview内容,android的textview怎么水平居中,安卓 textview,textview在哪,android textview设置字体,textview在哪,android中textview,安卓中textview,内容如对您有帮助,希望把文章链接给更多的朋友!

Android之TextView的样式类Span的使用详解(安卓textview设置文本)

版权声明:本文为博主原创文章,未经博主允许不得转载。

仿微信主界面导航栏图标字体颜色的变化 在所有的移动产品中,微信的界面做的很简洁,简单,我对微信主界面影响最深的就是微信底部导航栏的图标,以及字体颜色的变化,一直都想实现以

随着ScrollView的滑动,渐渐的执行动画View 今天是实现了一个小功能的东西。看看效果图:实现方式:1.自定义ScrollView复写onScrollChange方法,来计算滑动的位置。2.自定义接口,通过接口来在ScrollV

android自定义之 5.0 风格progressBar 最近做项目,用到了ProgressBar,就想到了要使用Android5.0的效果,就随手实现了一下。效果图:大概的思路:1.圆圈通过Canvas去绘制2.圆圈的动画通过Animato

标签: 安卓textview设置文本

本文链接地址:https://www.jiuchutong.com/biancheng/371001.html 转载请保留说明!

上一篇:Android GBK与UTF-8

下一篇:仿微信主界面导航栏图标字体颜色的变化(微信怎么导入主题模块)

  • 买材料通过公司走账合法吗
  • 退货开具红字发票销项税为负数税务局会查吗
  • 增值税无票收入可以抵扣
  • 资产减值损失在利润表怎么填列
  • 当月销项税大于进项税怎么办
  • 充话费送手机如何缴纳增值税
  • 专票上没写开户行合规吗
  • 计提成本会计分录怎么做
  • 没有合作会怎么样
  • 租赁场地费入什么科目
  • 固定资产进项税额怎么抵扣
  • 企业公益救济性工作总结
  • 土地作价入股土地如何过户
  • 交社保公积金需要劳动合同吗
  • 小规模超过30万是全额交税吗
  • 发票冲红后多交多少税
  • 防暑降温用品进什么科目
  • 公益事业捐赠
  • 工程安装成本分录
  • php获取远程文件扩展名
  • 现在windows11
  • linux从入门到什么搞笑
  • 企业公益捐赠的意义
  • 进项发票认证操作
  • uniapp vuecli
  • 进项税额转出会计分录账务处理
  • 未开票收入如何申报
  • 户外电源需要要充电吗
  • 前端es2020
  • ajax调用php接口
  • 如何使用首页
  • discuz关闭电脑版
  • 将本月发生的制造费用总额按生产工人
  • 从业人数啥意思
  • 土增税预征计征依据
  • 公转私法人
  • 关于DEDECMS移动data后网站地图无法生成的解决方法
  • 差旅费可以抵扣嘛
  • 产品成本包括哪些
  • 子公司注销时的账务处理
  • 存货跌价准备在借方表示什么
  • mysql查询并设置变量
  • 实际已缴纳所得税额怎么填
  • 资产负债表调整事项
  • 房地产公司收到客户违约金会计科目
  • 应付账款不需要支付了会计怎么处理
  • 其他应付款如何清零
  • 合并报表存货抵消
  • 代销产品如何做会计分录
  • 国地税合并对个人带来的影响
  • 应交增值税结转凭证
  • 母公司代子公司收款,子公司开具发票
  • 12月收入1月份开发票怎么报企业所得税
  • 营改增涉及哪些项目
  • 对公账户往来款需要开票吗
  • 主营业务收入一定要结转成本吗
  • mysql子查询效率如何
  • sql server分组查询
  • distinct 多个
  • mysqldumpslow
  • win7系统更新软件
  • 左右内边距代码
  • macos finder的应用程序列表在哪里
  • mac新版系统
  • paytime.exe - paytime是什么进程 有什么用
  • linux怎么查看硬件信息
  • cocos环境搭建
  • unity物体旋转到指定角度
  • js必须掌握的知识点
  • javascript教程chm
  • python的遍历
  • json web key
  • vue中的vuex
  • 如何使用form表单
  • jquery.data
  • 医保可以异地交嘛
  • 资产管理公司收购不良资产后怎么处置
  • 智能财税证书含金量多少
  • 现任新疆兵团政治部主任
  • 税务开通需要什么东西
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设