2

Html.fromHtml()を使用して、単純な Html を TextView に表示しています。私の好みでは、<h2>見出しのフォントサイズが少し大きすぎるので、どうすればいいのか疑問に思っていました.Htmlクラスにはそのためのメソッドがありません. ソースコードを掘り下げて、クラスを拡張したり、メソッドをオーバーライドしたりできるかどうかを確認しますが、おそらく誰かが特定の Html タグのフォントサイズを設定することを既に達成していますか?

4

1 に答える 1

3

それは確かに可能です。Html.fromHtml()一緒に送信された独自の Handlerを使用するだけです。

次のようにできます。

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

を使用して、現在の 80% の相対サイズで要素の内側にnew RelativeSizeSpan(0.8f)を描画します。SpanTextView<h2>

Android のすべての HTML タグ ハンドラもこのように定義されています。

于 2013-08-09T08:54:15.297 に答える