HTML.TagHandler is not detecting Android Supported Html tags like <p> and <b>

1.4k Views Asked by At

I am new to Android and learned everything from StackOverflow but I am Stuck here. The Html.TagHandler is not detecting any HTML tags like < p> ,< b>,etc apart from < img> tags like shown in the Logcat. I have to use < p> tag for using Custom fonts. Thanks in Advance

 String source = "<b>This text is bold</b>\n" +
            "<p>This is another paragraph.</p>\n" +
            "<img src=\"http://media.caranddriver.com/images/media/51/25-cars-worth-waiting-for-lp-mclaren-p14-photo-658259-s-original.jpg\" alt=\"W3Schools.com\" ><br>\n" +
            "<img src=\"https://www.driving.co.uk/s3/st-driving-prod/uploads/2015/12/sti_RP_-_AMG_GT-72jpg-JS164837332.jpg\" alt=\"W3Schools.com\" ><br>\n";

    URLImageParser p = new URLImageParser(s, Info_Activity.this);
    HtmlTagHandler tagHandler = new HtmlTagHandler();

    Spannable html = (Spannable) Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY, p,tagHandler);
    TextView  = (TextView) findViewById(R.id.textView2);
    textview.setText(html);

This is HtmlTagHandler.class

public class HtmlTagHandler implements Html.TagHandler {
@Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
    Log.e("Tag", tag);
     if (tag.startsWith("b") ) {
         Log.e("Tage", "Code tag encountered1");
        if (opening) {
            Log.e("Tage", "Code tag encountered1");
            output.setSpan(new TypefaceSpan("monospace"), output.length(), output.length(), Spannable.SPAN_MARK_MARK);
        } else {
            Log.e("Tage", "Code tag encountered2");
            Object obj = getLast(output, TypefaceSpan.class);
            int where = output.getSpanStart(obj);
            output.removeSpan(obj);
            output.setSpan(new TypefaceSpan("monospace"), where, output.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
    else {
         Log.e("Tage", "Code Exited");
     }

}

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

The LogCat:

07-11 17:23:29.712 16859-16859/com.fab E/Tag: html
07-11 17:23:29.712 16859-16859/com.fab E/Tage: Code Exited
07-11 17:23:29.712 16859-16859/com.fab E/Tag: body
07-11 17:23:29.712 16859-16859/com.fab E/Tage: Code tag encountered1
07-11 17:23:29.712 16859-16859/com.fab E/Tage: Code tag encountered1
07-11 17:23:29.715 16859-16859/com.fab E/Tag: img
07-11 17:23:29.715 16859-16859/com.fab E/Tage: Code Exited
07-11 17:23:29.718 16859-16859/com.fab E/Tag: img
07-11 17:23:29.718 16859-16859/com.fab E/Tage: Code Exited
07-11 17:23:29.718 16859-16859/com.fab E/Tag: body
07-11 17:23:29.718 16859-16859/com.fab E/Tage: Code tag encountered1
07-11 17:23:29.718 16859-16859/com.fab E/Tage: Code tag encountered2
07-11 17:23:29.718 16859-16859/com.fab E/Tag: html
07-11 17:23:29.718 16859-16859/com.fab E/Tage: Code Exited
0

There are 0 best solutions below