Html.fromHtml()设置<h2>,</h2> <h3>等的文本大小</h3>

时间:2013-08-09 08:45:08

标签: android

我正在使用Html.fromHtml()在TextView中显示一些简单的Html。根据我的口味,<h2>标题的字体大小有点太大,所以我想知道如何做到这一点,Html类没有方法。 我将深入研究source code,看看我是否可以扩展一个类,覆盖一个方法或其他东西,但也许有人已经实现了为某些Html标签设置字体大小?

1 个答案:

答案 0 :(得分:2)

这是可能的。您只需使用Html.fromHtml()与您自己的处理程序一起使用。

你可以这样做:

CharSequence html = Html.fromHtml(markdownString, null, new TitleHandler());

...

static class TitleHandler implements TagHandler {

  @Override
  public void handleTag(boolean opening, String tag, Editable output,
      XMLReader xmlReader) {
    if (tag.equalsIgnoreCase("h2")) {
      processH2(opening, output);
    }
  }

  public void processH2(boolean opening, Editable output) {
    int len = output.length();
    if (opening) {
      output.setSpan(new RelativeSizeSpan(0.8f), len, len,
          Spannable.SPAN_MARK_MARK);
    } else {
      Object obj = getLast(output, RelativeSizeSpan.class);
      int where = output.getSpanStart(obj);
      output.removeSpan(obj);
      if (where != len) {
        output.setSpan(new RelativeSizeSpan(0.8f), where, len,
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
      }
    }
  }

  @SuppressWarnings({ "unchecked", "rawtypes" })
  private Object getLast(Editable text, Class kind) {
    Object[] objs = text.getSpans(0, text.length(), kind);

    if (objs.length == 0) {
      return null;
    } else {
      for (int i = objs.length; i > 0; i--) {
        if (text.getSpanFlags(objs[i - 1]) == Spannable.SPAN_MARK_MARK) {
          return objs[i - 1];
        }
      }
      return null;
    }
  }
}

使用new RelativeSizeSpan(0.8f),您可以在Span元素内的TextView中绘制<h2>,其相对大小为80%。

Android的所有HTML标记处理程序也都是这样定义的。