Android 标红字符串中所有的数字

  /**
   * 数字标红,见到数字就标红
   *
   * @return
   */
  private SpannableString markNumber(String str) {
    if (!Tools.isEmpty(str)) {
      SpannableString spannableString = new SpannableString(str);
      for (int i = 0; i < str.length(); i++) {
        int start = str.length() - 1;
        int end = 0;
        if (isNumberChar(str.charAt(i))) {
          start = i;
          for (int j = i + 1; j < str.length(); j++) {
            if (isNumberChar(str.charAt(j))) {
              continue;
            } else {
              end = j - 1;
              i = j;
              break;
            }
          }
          if (start <= end) {
            //注意这里不要使用以下方式,否则只会把最后一个数字的颜色改变
            // ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor(ORANGE_COLOR));
            // spannableString.setSpan(colorSpan, start, end + 1,Spanned.SPAN_INCLUSIVE_INCLUSIVE);
            spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(ORANGE_COLOR)), start, end + 1,
                Spanned.SPAN_INCLUSIVE_INCLUSIVE);
          }
        }
      }
      return spannableString;
    } else {
      return new SpannableString("");
    }
  }

**
   * 判断字符是否是数字
   *
   * @param c
   * @return
   */
  private boolean isNumberChar(char c) {
    return c >= 48 && c <= 57;
  }

注意:在调用setSpan的时候,一个Span只会被使用一次,同时使用一个span,只会显示最后一次设置的效果,所以,这里new了一个新的Span,而不是复用一个。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,422评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,730评论 0 17
  • 首先安装jdk Java环境,因为jenkins是Java编写,下载地址: http://www.oracle.c...
    轶匠阅读 11,372评论 47 29
  • 我想没有人会比我更害怕死亡本身。 患有严重的焦虑症,恐慌症,被害妄想症,自身每天都处于高度紧张中。 去世的深爱的外...
    六月小少女阅读 3,511评论 0 1
  • 1.感恩昨天晚上睡的如此的香甜。清晨醒来全身的细胞充满了活力。谢谢,谢谢谢谢 2.感恩睁开双眼就看到,伙伴们,报体...
    阳光之旅001阅读 1,313评论 0 1