Я прийшов сюди шукати реалізації TagHandler. І відповіді Truong Nguyen і Aman Guatam дуже приємні, але мені потрібна була змішана версія обох: мені потрібно було моє рішення, щоб не переформатувати його і щоб переробити <ol>теги, оскільки я аналізую щось подібне <h3>title</h3><ol><li>item</li><li>item</li><li>item</li></ol>.
Ось моє рішення.
import org.xml.sax.XMLReader;
import android.text.Editable;
import android.text.Html.TagHandler;
public class MyTagHandler implements TagHandler {
boolean first = true;
String parent = null;
int index = 1;
public void handleTag(final boolean opening, final String tag,
final Editable output, final XMLReader xmlReader) {
if (tag.equals("ul")) {
parent = "ul";
index = 1;
} else if (tag.equals("ol")) {
parent = "ol";
index = 1;
}
if (tag.equals("li")) {
char lastChar = 0;
if (output.length() > 0) {
lastChar = output.charAt(output.length() - 1);
}
if (parent.equals("ul")) {
if (first) {
if (lastChar == '\n') {
output.append("\t• ");
} else {
output.append("\n\t• ");
}
first = false;
} else {
first = true;
}
} else {
if (first) {
if (lastChar == '\n') {
output.append("\t" + index + ". ");
} else {
output.append("\n\t" + index + ". ");
}
first = false;
index++;
} else {
first = true;
}
}
}
}
}
Зауважте, оскільки ми скидаємо значення індексу кожного разу, коли починається новий список, він НЕ буде працювати, якщо ви вводите списки, як у <ol><li>1<ol><li>1.1</li><li>1.2</li></ol><li>2</li></ol>
- 1
- 1.1
- 1.2
- 2
З цим кодом ви отримаєте 1, 1, 2, 3замість 1, 1, 2, 2.