0

Here is what i am trying to do,

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

And on a Click event, i m trying to convert it to HTML, by this code

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

I am expecting some

 <h1> or <h2> tag

But what i see is this

<p dir=ltr>Shiva</p>

Kindly help me, if you can.

Sivakumar S
  • 681
  • 5
  • 19

2 Answers2

0

Html.toHtml will return content in <p> or <div> tag,

Have you look at source code of Html.toHtml ?

Check following code, I pulled that code from latest Android 4.3 build. you can see that toHtml function call withinHtml and withinHtml function just put div around span and set align attribute.

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>");
            }
        }
    }
Ketan Parmar
  • 2,962
  • 19
  • 27
0

another way would be using the AbsoluteSizeSpan.class
s.setSpan(new AbsoluteSizeSpan(14), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
this would return something like: <font size ="2">Shiva</font>

Joao B
  • 91
  • 1
  • 8