美文网首页Android开发知识小集
Android 标红字符串中所有的数字

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

作者: CyanStone | 来源:发表于2018-07-06 17:24 被阅读98次
      /**
       * 数字标红,见到数字就标红
       *
       * @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,而不是复用一个。

    相关文章

      网友评论

      • 有点健忘:最近在学正则表达式,就练习下,感觉比较省事,建议简单学习
        val sp = SpannableString(str)
        val matcher = Pattern.compile("\\d+").matcher(str)
        while (matcher.find()) {
        sp.setSpan(ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), SpannableString.SPAN_INCLUSIVE_EXCLUSIVE)
        }
        tv_number.setText(sp):smile:

      本文标题:Android 标红字符串中所有的数字

      本文链接:https://www.haomeiwen.com/subject/vnsbuftx.html