位置: 编程技术 - 正文

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

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

  • 小规模纳税人刚成立公司如何记账
  • 广告费的税前扣除是多少
  • 怎么找回丢失的手机号
  • 怎么从税控系统导出明细
  • 设备安装成本如何核算
  • 境外中资企业转中资企业
  • 分摊材料成本差异的会计处理
  • 个人所得税免征项目有哪些
  • 农村承包土地能卖土吗
  • 纳税人跨县(市、区)是指
  • 缴纳的住房公积金计入什么科目
  • 公司低价卖房土地增值税计税方法是什么
  • 软件企业怎么享受三免两减半
  • 防洪工程维护费取消
  • 第三方派遣劳务不续签补偿金哪边出
  • 购买原材料并作会计分录
  • 社保滞纳利息所得税前扣除
  • 收据怎么写比较规范
  • 登陆对话框不能输入
  • wps的广告怎么关掉
  • 或有事项的计量结束语
  • 公司章程认缴时效是多久
  • 企业预付保险费怎么做账
  • 虚增成本调增还会被处罚吗
  • 哪些抵押物必须登记才有效
  • 费用确认条件新准则
  • 腾讯手游助手玩不了金铲铲
  • 电脑如何进入bios设置
  • php数组函数,选班长
  • 撤销账户申请怎么写
  • 出口收汇可以收人民币吗
  • 个人房屋出租税票怎么开
  • 琼斯的大海怪
  • 什么是分红型保险?
  • curl error6
  • vue-cli-service权限不够
  • 计算机领域划分
  • 前端不使用明文密码方案
  • cookie from
  • 关于高德地图的分析报告
  • 企业为其他企业担保有什么责任
  • 资产总额不超过5000万是指全年平均收入吗
  • 塔吊租赁人工合同
  • 固定资产售后回租融资租赁利息可以抵扣进项税额么
  • 增值税地方留存比例2023
  • 建筑材料开票可以抵税吗
  • mysql常用命令行大全
  • 增值税买票卖票
  • 培训费怎么收取
  • 增量留抵税额怎么算
  • 不得从销项税额中抵扣的进项税额,不得计提加计抵减额
  • 商场一般是怎么缴纳租金的
  • 税前扣除的职工福利费支出怎么算
  • 押金为什么要一个月才退
  • 待处理财产损益会计分录
  • 企业需要报哪些税
  • 装修材料增值税发票明细表
  • 接手前往年的银行余额不平怎么办?
  • 投资性房地产摊销从什么时候开始
  • 独立法人资格是独立核算
  • mysql1194
  • windows8文件夹怎么加密
  • ubuntu系统中文件夹不能改名
  • ubuntu右上角没有键盘
  • linux中添加用户和组的操作
  • centos mail命令
  • win10系统怎么关闭病毒防护
  • .android
  • 递归怎么调用
  • unity3d技术介绍
  • 关于ie浏览器下面说法正确的是
  • jquery动态效果
  • gridview行数
  • numpy基础知识
  • Android Http访问网络 学习(慕课网学习)
  • 用javascript
  • 安卓权限管理app
  • 银行流水怎么查
  • 副局长是由局长任命的吗
  • 扶贫绩效目标申请怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设