位置: 编程技术 - 正文

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

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

  • 施工单位缴税实例
  • 期末应交税费有余额吗
  • 产品含税价格加10个点不含税扣掉8个点合理吗
  • 增值税小规模纳税人
  • 收款和出库哪个借方哪个贷方?
  • 劳务公司涉及的税收
  • 个税超过部分征税还是全部
  • 如何从对公账户的资金情况来确定案件,发现犯罪嫌疑人?
  • 技术入股亏损如何清算
  • 增值税期初应补税额计算
  • 公转私可以实时到账吗
  • 分包部分也享受价格优惠
  • 企业辅助生产车间
  • 长期投资换入固定资产如何处理
  • 企业提供建筑服务,应向建筑服务发生地
  • 电子承兑到期怎样兑现
  • 买车时的保险包括哪些费用,多少钱
  • 支付收购股权款如何做账
  • 跨年收入没有进项发票怎么做帐?
  • 取得建安类专用发票能抵扣进项税吗
  • 厂房转让企业所得税计算方法
  • 转让五年以上住房免征个人所得税吗?
  • 租房发票的税由谁承担
  • 税友的票可以抵扣吗?
  • 进项税额转出是什么意思
  • 预提怎么写会计分录
  • 高新企业财务做账要求
  • 开票金额与实际金额差5元
  • 营业外支出期末需要结转吗
  • 物流公司进项票多了,可以帮人开票吗
  • 减资弥补亏损是什么行为
  • 小规模企业出口可以不报关吗
  • 固定资产净残值是什么意思
  • 关闭 ipv6
  • 出口视同内销的账务处理?
  • 直接计入当期利润的利得和损失有哪些
  • 拍到国际空间站过境
  • 喜马拉雅山脉中最高的山峰是什么
  • 企业汇算清缴中,A107070表中的数据是自动跳出来嘛
  • 后端三件套
  • javascript对象有哪些
  • geth命令行
  • 处置抵债资产的账务处理
  • 税务局规定500元以下收据的要求
  • 欠别人钱可以用车抵押吗
  • 坏账准备计提范围包括
  • 摊销结束后
  • centos安装MySQL数据库
  • 给个人的返佣如何交税
  • 固定资产的会计政策有哪些
  • 固定资产折旧方法和计算公式
  • 收到发票未收到货物
  • 无票收入需要缴纳文化事业建设税吗
  • 个人应如何进行社会实践
  • 企业进项构成比例
  • 直接人工标准工时计算公式
  • 转出未交增值税和未交增值税区别
  • 买水果送礼
  • 在mysql中,删除表的外键约束的关键字为()
  • sql server2000个人版安装步骤
  • mac怎么用浏览器
  • win8怎么设置定时关机
  • windows8关机在哪里
  • win2008怎么查看隐藏文件
  • sbdrvdet.exe - sbdrvdet是什么进程 有什么用
  • linux如何远程桌面
  • unity www读取本地视频文件和外部视频文件 播放视频动画和视频声音
  • 第三章之一、使用二手设备降低生产成本读后感
  • ADB (Android Debug Bridge)常用命令
  • jquery给复选框赋值
  • html、css和jquery相结合实现简单的进度条效果实例代码
  • android网络编程题库
  • unity异步加载场景
  • [置顶] 安卓手机连接IP100蓝牙打印机实现打印功能
  • 版权登记条件
  • 痛点 堵点 难点 盲点
  • 软件使用权转让税率
  • 会计的各种税
  • 涉密人员保密教育培训可以采取
  • 苏州二套房契税交多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设