位置: 编程技术 - 正文

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

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

  • 农机企业所得税税率
  • 外商投资企业要实缴资本么
  • 出口货物退免税政策
  • 买赠怎么做会计分录
  • 减免税款的会计分录摘要
  • 缴纳上月附加税会计科目
  • 往来账款怎么做
  • 工程材料发票备注要求
  • 税金及附加和应交税费的关系
  • 按季度申报,利润表中所得税费用怎么算出来的
  • 代扣代缴完税凭证是什么
  • 长期投资换入固定资产如何处理
  • 房地产企业营销设施建造费包括哪些
  • 哪些纳税人可以申请存量留抵退税
  • 会计凭证传递的终点是
  • 前期物业开办费和承接费一样吗
  • 工会应付下级经费
  • 有发票和银行单据的区别
  • 用支票结清运杂费的会计分录
  • 3个点的发票有哪些
  • 预缴土地增值税需要计提吗
  • 年薪制离职补偿金如何计算?
  • 每月交的社保什么时候到账
  • 小规模自开专票税率是1%还是3%
  • 公益性捐赠所得税处理
  • 法人垫付现金的原始凭证
  • 企业支付微信认证怎么弄
  • win 安全
  • linux怎么翻译
  • 预付维修费计入入账价值吗
  • php数组函数实现机选双色球
  • 移动硬盘通过软件改硬盘容量怎么改
  • hhupd.exe
  • 垫付员工保险费的会计科目
  • 天津市残保金缴纳标准
  • 商票 银行贴现
  • 年应税销售额包含哪些
  • 盆栽玉树的养殖方法
  • 税收返还需要缴纳什么税
  • PHP:mcrypt_generic_end()的用法_Mcrypt函数
  • uniapp引入全局scss
  • 麦地那老城
  • 多线程 cpp
  • 处置子公司账务处理
  • python中返回结果为true
  • 应收款需要平行公司吗
  • 《中华人民共和国治安管理处罚法》
  • 工程结算成本和主营业务成本一样吗
  • sql server数据迁移部分数据
  • 超详细的mac重装系统教程
  • mysql怎么修改
  • 应收账款余额贷方
  • 履约保证金没有交足
  • 预缴企业所得税计算公式
  • 工程外经证预缴税款计税方法
  • 残疾人残保金如何计算
  • 专票红冲信息表填开显示红字信息表金额大于蓝色金额
  • 如何处理固定资产报废
  • 公司租赁个人车辆租金多少合适
  • 内部损益是什么
  • 衍生工具的作用是什么
  • 主营业务收入用什么账簿登记
  • 新成立的公司哪个地方能查到
  • 简易征收增值税一般纳税人怎么报税
  • sql数据库性能
  • win10周年更新版是什么意思
  • win 2008
  • fedora下的bridge和nat设置方法
  • whSurvey.exe - whSurvey进程是什么意思
  • macappstore下载不了软件
  • linux d
  • 如何解决心脏供血不足
  • xp系统怎么禁止启动项
  • windows7压缩文件图标
  • node.js的作用是什么
  • android 基础
  • jquery中点击事件点击没动静
  • unity 优化
  • python设计程序
  • js知识总结
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设