位置: 编程技术 - 正文

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

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

  • 个人工程款收入不纳税
  • 员工福利开的专票怎么做分录
  • 如何开银行卡账户
  • 公司购买银行理财产品怎么做账
  • 外商投资企业啥意思
  • 折扣销售的增值税处理方式
  • 土地增值税清算管理规程
  • 本月完工入库会计分录
  • 工资分配率的计算公式
  • 存货成本包括消费吗
  • 工程管理费如何使用
  • 电子设备折旧率一般多少
  • 背书转让的电子承兑汇票开收据还是发票
  • 公司注销时应付职工薪酬怎么处理
  • 其他应付款冲销怎么做
  • 免税的投资收益需要调整利润表吗
  • 金税盘是固定资产还是无形资产
  • 企业所得说季报是季报填还是年底填?
  • 在公司发现问题该说吗
  • 享受小微企业所得税优惠条件2022
  • 企业职工教育经费
  • 应向客户收取的出租包装物租金
  • 残保金逾期未申报的税务怎么处理
  • 自然人股息红利免征个人所得税?
  • 公司基本账户冻结怎么办
  • 购买汽车分期付款利息怎么算
  • 以产品分成方式销售商品
  • 扣供应商的税点应该包括附加税吗
  • App Store可以退款吗
  • 企业所得税汇算清缴扣除标准2023
  • 商场充值卡发票在哪开
  • 资金运动包括哪几个方面
  • 一般纳税人出售旧设备的税率
  • 大家在抢红包怎么回复
  • PHP:date_sunrise()的用法_Date Time函数
  • laravel使用
  • 银行贷款成本高
  • php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
  • vuedraggable官方文档
  • 怎么让gridview居中
  • yolov3模型大小是多少
  • pytorch torch
  • php数组转树
  • 房地产企业建筑成本
  • 现金流量表填写说明
  • css的transition滑动效果
  • 边际贡献分析法案例
  • 企业年有什么用
  • 股权转让怎么做账
  • 实收资本没有实缴,财务报表里面怎么写
  • 发票抵扣联要放入凭证里吗
  • 预提成本费用的会计分录
  • 员工出差的费用怎么算
  • 融资费用包括什么?
  • 汇兑损益的账务处
  • 合并两公司的帐务处理
  • 高速公路过路费增值税
  • 非营利医疗机构免征哪几种税
  • 工业企业增值税负率一般控制在多少
  • mysqlsum查询慢
  • 微软宣布将AI引入Office套件
  • Mac OSX通过homebrew卸载formula的方法
  • windows下打开ie提示由于该计算机受到限制,本次操作已被取消
  • windows窗口跑到了侧面
  • linux检查更新
  • win8怎么启动资源管理器
  • win8系统ie浏览器打不开
  • win8磁盘占用率100%
  • linux用什么写c
  • jsonp的使用
  • cocos2dx android游戏防破解总结
  • 封装是什么意思?
  • unity shader saturate
  • 张孝祥西江月
  • android开发—01开发环境的搭建
  • 百旺开票人怎么把管理员改成人名
  • 应付和未付的区别
  • 高新区地税办税服务厅
  • 在京东上买货
  • 我国国家宪法日是每年的十二月几日
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设