Android开发知识小集

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

2018-07-06  本文已影响98人  CyanStone
  /**
   * 数字标红,见到数字就标红
   *
   * @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,而不是复用一个。

上一篇下一篇

猜你喜欢

热点阅读