Html.toHtml () не конвертирует текст RelativeSizeSpan 'ed

0

Вот что я пытаюсь сделать,

    SpannableString s = new SpannableString("Shiva");
    s.setSpan(new RelativeSizeSpan(2f), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    editText.setText(s, TextView.BufferType.SPANNABLE);

И на событии Click, im пытается преобразовать его в HTML, по этому коду

    Log.d("SampleApp",Html.toHtml(editText.getText()));

Я ожидаю некоторых

 <h1> or <h2> tag

Но я вижу это

<p dir=ltr>Shiva</p>

Пожалуйста, помогите мне, если сможете.

Теги:
spannable

2 ответа

0

Другой способ - использовать AbsoluteSizeSpan.class
s.setSpan (новый AbsoluteSizeSpan (14), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
это вернет что-то вроде: <font size = "2"> Shiva </font>

0

Html.toHtml вернет содержимое в <p> или <div>

Вы смотрите исходный код Html.toHtml?

Проверьте следующий код, я вытащил этот код из последней версии Android 4.3. вы можете видеть, что вызов функцииHTML внутри внутриHtml и внутриHtml-функции просто поместил div вокруг диапазона и установил атрибут align.

public static String toHtml(Spanned text) {
        StringBuilder out = new StringBuilder();
        withinHtml(out, text);
        return out.toString();
    } 

private static void withinHtml(StringBuilder out, Spanned text) {
        int len = text.length();

        int next;
        for (int i = 0; i < text.length(); i = next) {
            next = text.nextSpanTransition(i, len, ParagraphStyle.class);
            ParagraphStyle[] style = text.getSpans(i, next, ParagraphStyle.class);
            String elements = " ";
            boolean needDiv = false;

            for(int j = 0; j < style.length; j++) {
                if (style[j] instanceof AlignmentSpan) {
                    Layout.Alignment align =
                        ((AlignmentSpan) style[j]).getAlignment();
                    needDiv = true;
                    if (align == Layout.Alignment.ALIGN_CENTER) {
                        elements = "align=\"center\" " + elements;
                    } else if (align == Layout.Alignment.ALIGN_OPPOSITE) {
                        elements = "align=\"right\" " + elements;
                    } else {
                        elements = "align=\"left\" " + elements;
                    }
                }
            }
            if (needDiv) {
                out.append("<div ").append(elements).append(">");
            }

            withinDiv(out, text, i, next);

            if (needDiv) {
                out.append("</div>");
            }
        }
    }
  • 0
    Хорошо. я понимаю, что в этом случае, по крайней мере, я могу ожидать <p dir = ltr> <h1> Шива </ h1> </ p>, так как у меня есть размах родственников, верно?
  • 0
    Да, я надеюсь, что мой ответ разрешит ваш вопрос. Если да, отметьте как решенный, спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню