博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpannableString的一个奇怪的问题
阅读量:6837 次
发布时间:2019-06-26

本文共 2972 字,大约阅读时间需要 9 分钟。

今天使用spannableString遇到一个奇怪的问题,就是在setspan的时候,原本可以写成

1 spannableString.setSpan(new RelativeSizeSpan(0.5f), stringsize + 2,2                     2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);3             spannableString.setSpan(new ForegroundColorSpan(Color.LTGRAY),4                     stringsize + 2, 2 + stringsize + 1,5                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE);6             textView_next_distance.setText(spannableString);

这种形式,注意setSpan后边有设置字体大小(new RelativeSizeSpan(0.5))的一个object,和设置文字颜色(new ForegroundColorSpan(Color.LIGRAY))的object。因为后边用这个字体大小和颜色的文字很多,因此我就在把这个object实例化到了成员变量里,统一使用和修改。

1 private RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.5f);2     private ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(3             Color.LTGRAY);

但这样问题就出现了,当在同一个textview中使用两次相同的成员变量时,前一个改变的文字就无效了。

正确的写法应该是第一个 使用成员变量里的,如果有第二个或第三个那就再new新的,如下就没有问题

1 // 道路指引,路段剩余距离 2             String strDistance = naviInfo.getCurStepRetainDistance() + ""; 3             stringsize = strDistance.length(); 4             spannableString = new SpannableString("前方" + strDistance + "米" 5                     + ConsUtil.strActions[naviInfo.m_Icon]); 6             spannableString.setSpan(relativeSizeSpan, 0, 2, 7                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 8             spannableString.setSpan(foregroundColorSpan, 0, 2, 9                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE);10             spannableString.setSpan(new RelativeSizeSpan(0.5f), stringsize + 2,11                     2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);12             spannableString.setSpan(new ForegroundColorSpan(Color.LTGRAY),13                     stringsize + 2, 2 + stringsize + 1,14                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE);15             textView_next_distance.setText(spannableString);

 

效果如图:

错误的做法是

1 // 道路指引,路段剩余距离 2             String strDistance = naviInfo.getCurStepRetainDistance() + ""; 3             stringsize = strDistance.length(); 4             spannableString = new SpannableString("前方" + strDistance + "米" 5                     + ConsUtil.strActions[naviInfo.m_Icon]); 6             spannableString.setSpan(relativeSizeSpan, 0, 2, 7                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 8             spannableString.setSpan(foregroundColorSpan, 0, 2, 9                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE);10             spannableString.setSpan(relativeSizeSpan, stringsize + 2,11                     2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);12             spannableString.setSpan(foregroundColorSpan,13                     stringsize + 2, 2 + stringsize + 1,14                     Spannable.SPAN_INCLUSIVE_EXCLUSIVE);15             textView_next_distance.setText(spannableString);

结果就只有后面的样式有效,前面的自动恢复为默认样式

如图:

至于为什么会这样还不太清楚,这个需要研究源码才能得知,现在在加班,如果以后查出来了,后续我会 把原因补上。

 

我的github地址:https://github.com/dongweiq/study

欢迎关注,欢迎star o(∩_∩)o 。有什么问题请邮箱联系 dongweiqmail@gmail.com qq714094450

 

转载地址:http://uyqkl.baihongyu.com/

你可能感兴趣的文章
《SQL Server性能调优实战》知识点汇总
查看>>
JS 中文乱码
查看>>
原生JS实现音乐播放器!
查看>>
hive-安装MySQL(centos6.4)
查看>>
UVa 12100 Printer Queue (习题 5-7)
查看>>
windows下安装apache zookeeper
查看>>
第三周作业
查看>>
git pull --rebase
查看>>
linux下mysql的root密码忘记解决方
查看>>
protobuf 中的嵌套消息的使用 主要对set_allocated_和mutable_的使用
查看>>
0-1背包问题
查看>>
系统的Drawable(二)-Selector
查看>>
CAS 界面根据不同的域名显示不同的界面
查看>>
Node js 嵌入式模板引擎 ejs 的使用
查看>>
vue 事件修饰符
查看>>
自定义的一个JDBC工具类
查看>>
数据类型(列类型)
查看>>
hihocoder [Offer收割]编程练习赛14
查看>>
mongodb_服务端安装及连接
查看>>
将baidu地图中的baidu logo去掉
查看>>