11/08/2018, 21:42
Support List tag of HTML in TextView using fromHtml()
There is a lovely method on the android.text.Html class, fromHtml(), that converts HTML into a Spannable for use with a TextView. TextView textView = ( TextView ) findViewById ( R . id . textView1 ) ; //class ListTagHandler will be used here. textView . setText ( Html . fromHtml ( ...
There is a lovely method on the android.text.Html class, fromHtml(), that converts HTML into a Spannable for use with a TextView.
TextView textView = (TextView) findViewById(R.id.textView1); //class ListTagHandler will be used here. textView.setText(Html.fromHtml(newsText, null, new ListTagHandler())); public class ListTagHandler implements TagHandler { private int index = 0; private List<String> parents = new ArrayList<String>(); /* (non-Javadoc) * @see android.text.Html.TagHandler#handleTag(boolean, java.lang.String, android.text.Editable, org.xml.sax.XMLReader) */ @Override public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { if (opening) { parents.add(tag); } else parents.remove(tag); index = 0; } else if (tag.equals("li") && !opening) handleListTag(output); } /** * @param output */ private void handleListTag(Editable output) { if (parents.get(parents.size() - 1).equals("ul")) { output.append(" "); String[] split = output.toString().split(" "); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.setSpan(new BulletSpan(15 * parents.size()), start, output.length(), 0); } else if (parents.get(parents.size() - 1).equals("ol")) { index++; output.append(" "); String[] split = output.toString().split(" "); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.insert(start, index + ". "); output.setSpan(new LeadingMarginSpan.Standard(15 * parents.size()), start, output.length(), 0); } } }