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

 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);

效果如图:

错误的做法是

 // 道路指引,路段剩余距离
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);

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

如图:

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

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

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

SpannableString的一个奇怪的问题的更多相关文章

  1. MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题

    今天遇到一个奇怪的问题. 开发环境: 1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库 2. Visual Studio 2008 问题描述: 在 eclipse cdt 中 ...

  2. 遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了

    遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了 找了一下午没解决.

  3. 【Windows 7】发现一个奇怪的现象

    最近在Windows7-32位操作系统上发现一个奇怪的现象,不知道64位操作系统上会不会发生这个现象.这个现象就是:如果系统上的一个或多个账户没有设置密码,那么在此条件下终止winlogon.exe进 ...

  4. PHP 浮点型转整型的一个奇怪现象

    起因 最近通过一个学长的题了解php弱类型的时候,发现了一个奇怪的现象. 正文 主要问题在这样一段代码: $c=(int)((0.1+$b)*10); 当$b=0.6,0.8以及其他值的时候都正常 将 ...

  5. chrome一个奇怪的问题

    我去........... 这牢骚发完了才发现,  多谢了个e 呃................. ================================= 晚上用bootstrap搭建一 ...

  6. 一个奇怪的JS函数

    今天在分析一个jQuery插件源码的时候,发现了一个奇怪的函数. 这个函数的目的是为数字补零,如传入7,输出07,传入12输出12.由于是对时间补零,只截取后两位. // add leading ze ...

  7. web3部署智能合约碰到的一个奇怪问题

    都是gasLimit惹的祸 解决一个奇怪问题Error: Number can only safely store up to 53 bits 原来好好的node endpointtest.js ,结 ...

  8. (原)关于OpenSL ES播放音频数据的一个奇怪的问题

    关于OpenSL ES播放音频数据的一个奇怪的问题 Author:lihaiping1603@aliyun.com 最近用业余时间做了一个android平台的播放器sdk,其中视频用的opengl e ...

  9. 痞子衡嵌入式:一个奇怪的Keil MDK下变量链接强制对齐报错问题(--legacyalign)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题. 痞子衡最近一直在参与恩智浦SBL项目(就是一个适用LPC和i.MXRT的完整OT ...

随机推荐

  1. PHP MySQL 创建数据库

    PHP MySQL 创建数据库 数据库存有一个或多个表. 你需要 CREATE 权限来创建或删除 MySQL 数据库. 使用 MySQLi 和 PDO 创建 MySQL 数据库 CREATE DATA ...

  2. 测试stopwatch频率

    测试stopwatch频率 using UnityEngine; using System.Collections; using System.Diagnostics; public class te ...

  3. 二套小清新(APP界面)

                   

  4. git操作(强烈推荐)

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  5. [Python笔记]第六篇:文件处理

    本篇主要内容:open文件处理函数的使用 open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打 ...

  6. 代码审查 Code Review

    为什么要做代码审查 代码审查最主要目的是保证软件质量,找出及修正在软件开发过程中的错误.同时,通过不同能力评审者对代码的分析和建议,可以很快提升编码能力和编码修养. 1. 保证软件质量 通常软件开发完 ...

  7. Python3 如何优雅地使用正则表达式(详解一)

    注:本文翻译自 Regular Expression HOWTO,小甲鱼童鞋对此做了一些注释和修改. 正则表达式介绍 正则表达式(Regular expressions 也称为 REs,或 regex ...

  8. POJ - 3903 Stock Exchange(LIS最长上升子序列问题)

    E - LIS Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u   Descripti ...

  9. 学生选课系统数据库SQL语句考试题

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  10. 兼容各浏览器中的PNG透明效果CSS定义

    <style>.mycls{width: 48px;height: 48px;background: url(20090318230119136.png) no-repeat left t ...