Span to obiekt, który opisuje tekst najprościej mówiąc. Ma kilka interfejsów: w tym wypadku stosowane są dwa, w tym jeden nas nie dotyczy.
LeadingMarginSpan to interfejs, który określa span, który charakteryzuje się tym, ze cały tekst ma leading margin, czyli margines przed tekstem.
Metody tego interfejsu:
public abstract int getLeadingMargin (boolean first) - zwraca jak bardzo tekst ma być wysunięty. W tym wypadku wartość stała równa: dwa razy promień + wielkość przerwy. Standardowo wychodzi jakieś: 2*3+2 = 8.
public abstract void drawLeadingMargin (Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout)
odpowiada za rysowanie kropki, gdy jest to początek spana.
Czytając więcej znalazłem kod, który jeszcze bardziej może ci się przydać: Handling custom tags in Android using Html.TagHandler()
Ten kod dokleja na początku każdej linii numerowanie itd. lecz nie robi osobnego wcięcia dla numerowania, lecz można to szybko poprawić, gdy spojrzy się, że klasa LeadingMarginSpan.Standard ma konstruktor:
LeadingMarginSpan.Standard(int first, int rest)
Constructor taking separate indents for the first and subsequent lines.
Więc wystarczy, że 76 linię tego kodu poprawisz.
Nie odpowiadam za jakość tego kodu. Przypuszczam, ze może mieć błędy.