SpannableString的一个奇怪的问题
2015-07-05 12:30
309 查看
今天使用spannableString遇到一个奇怪的问题,就是在setspan的时候,原本可以写成
这种形式,注意setSpan后边有设置字体大小(new RelativeSizeSpan(0.5))的一个object,和设置文字颜色(new ForegroundColorSpan(Color.LIGRAY))的object。因为后边用这个字体大小和颜色的文字很多,因此我就在把这个object实例化到了成员变量里,统一使用和修改。
但这样问题就出现了,当在同一个textview中使用两次相同的成员变量时,前一个改变的文字就无效了。
正确的写法应该是第一个 使用成员变量里的,如果有第二个或第三个那就再new新的,如下就没有问题
效果如图:
![](http://images0.cnblogs.com/blog2015/499650/201507/051224165651976.png)
错误的做法是
结果就只有后面的样式有效,前面的自动恢复为默认样式
如图:
![](http://images0.cnblogs.com/blog2015/499650/201507/051228060604233.png)
至于为什么会这样还不太清楚,这个需要研究源码才能得知,现在在加班,如果以后查出来了,后续我会 把原因补上。
我的github地址:https://github.com/dongweiq/study
欢迎关注,欢迎star o(∩_∩)o 。有什么问题请邮箱联系 dongweiqmail@gmail.com qq714094450
spannableString.setSpan(new RelativeSizeSpan(0.5f), stringsize + 2, 2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ForegroundColorSpan(Color.LTGRAY), stringsize + 2, 2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); textView_next_distance.setText(spannableString);
这种形式,注意setSpan后边有设置字体大小(new RelativeSizeSpan(0.5))的一个object,和设置文字颜色(new ForegroundColorSpan(Color.LIGRAY))的object。因为后边用这个字体大小和颜色的文字很多,因此我就在把这个object实例化到了成员变量里,统一使用和修改。
private RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.5f); private ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan( Color.LTGRAY);
但这样问题就出现了,当在同一个textview中使用两次相同的成员变量时,前一个改变的文字就无效了。
正确的写法应该是第一个 使用成员变量里的,如果有第二个或第三个那就再new新的,如下就没有问题
// 道路指引,路段剩余距离 String strDistance = naviInfo.getCurStepRetainDistance() + ""; stringsize = strDistance.length(); spannableString = new SpannableString("前方" + strDistance + "米" + ConsUtil.strActions[naviInfo.m_Icon]); spannableString.setSpan(relativeSizeSpan, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(foregroundColorSpan, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(new RelativeSizeSpan(0.5f), stringsize + 2, 2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(new ForegroundColorSpan(Color.LTGRAY), stringsize + 2, 2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); textView_next_distance.setText(spannableString);
效果如图:
![](http://images0.cnblogs.com/blog2015/499650/201507/051224165651976.png)
错误的做法是
// 道路指引,路段剩余距离 String strDistance = naviInfo.getCurStepRetainDistance() + ""; stringsize = strDistance.length(); spannableString = new SpannableString("前方" + strDistance + "米" + ConsUtil.strActions[naviInfo.m_Icon]); spannableString.setSpan(relativeSizeSpan, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(foregroundColorSpan, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(relativeSizeSpan, stringsize + 2, 2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(foregroundColorSpan, stringsize + 2, 2 + stringsize + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); textView_next_distance.setText(spannableString);
结果就只有后面的样式有效,前面的自动恢复为默认样式
如图:
![](http://images0.cnblogs.com/blog2015/499650/201507/051228060604233.png)
至于为什么会这样还不太清楚,这个需要研究源码才能得知,现在在加班,如果以后查出来了,后续我会 把原因补上。
我的github地址:https://github.com/dongweiq/study
欢迎关注,欢迎star o(∩_∩)o 。有什么问题请邮箱联系 dongweiqmail@gmail.com qq714094450
相关文章推荐
- android stuido环境下获取sha1的方法
- 实用的Class类
- adb server is out of date.killing的解决办法
- nutz中实现登录验证
- .NET 下第一次接触Redis数据库
- 【二十一】创建二叉树--指路法
- jvm垃圾收集(标记-清除,复制,标记-整理,分代)算法
- 学生信息管理系统(三)——接口分析
- OpenCV+MFC显示图像
- BZOJ3682 Phorni
- Eclipse快捷键 10个最有用的快捷键
- 传统文化
- ocp053第411题
- 获取定位信息
- String类
- unity, Destroy注意事项
- stl之map容器的原理及应用
- 【LeetCode】2 Add Two Numbers
- linux下如何模拟按键输入和模拟鼠标?
- POJ 2846 解题报告 Trie 树变型