Упорядоченные списки внутри Android TextView

Я хочу отобразить упорядоченный список внутри TextView, например:
1) пункт 1
2) пункт 2

Используя следующий макет:

<TextView android:text="<ol><li>item 1\n</li><li>item 2\n</li></ol> /> 

Я получил:

  • Пункт 1
  • Пункт 2

Как я могу изменить маркеры на цифры?

Благодарю.

Я думаю, вы должны сделать это в коде. Мне пришлось подклассировать LeadingMarginSpan, чтобы заставить это работать. Вот как я это сделал.

 private class NumberIndentSpan implements LeadingMarginSpan { private final int gapWidth; private final int leadWidth; private final int index; public NumberIndentSpan(int leadGap, int gapWidth, int index) { this.leadWidth = leadGap; this.gapWidth = gapWidth; this.index = index; } public int getLeadingMargin(boolean first) { return leadWidth + gapWidth; } public 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 l) { if (first) { Paint.Style orgStyle = p.getStyle(); p.setStyle(Paint.Style.FILL); float width = p.measureText("4."); c.drawText(index + ".", (leadWidth + x - width / 2) * dir, bottom - p.descent(), p); p.setStyle(orgStyle); } } } 

Соблюдайте свое мнение и используйте его так:

 SpannableStringBuilder ssb = new SpannableStringBuilder(); for(String text : list) { int contentStart = content.length(); content.append(text); content.setSpan(new NumberIndentSpan(15, 15, number), contentStart, content.length(), 0); } TextView view = findViewById(R.id.....); view.setText(ssb); 

Надеюсь, это поможет другим, кто ищет это 🙂

Вы можете использовать этот способ вместо этого:

 &#8226; foo<br/> &#8226; bar<br/> &#8226; baz<br/> 

Вот решение, которое я использую. Вы можете скопировать и вставить его в действие, чтобы увидеть, как он работает, но вы должны изменить все атрибуты с помощью переменных для производства. Вы можете играть с параметрами заполнения для отступов в соответствии с вашими потребностями. Вместо цифр вы можете использовать маркер bullet, если хотите список пули.

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/bullet1" android:textStyle="bold" android:layout_width="30dp" android:gravity="right" android:layout_height="wrap_content" android:paddingRight="5dp" android:text="1" android:textSize="20dp" /> <TextView android:id="@+id/bullet1Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="10dp" android:text="First bullet. First bullet. First bullet. First bullet. First bullet. First bullet. First bullet. First bullet. " android:textSize="15dp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/bullet2" android:textStyle="bold" android:layout_width="30dp" android:gravity="right" android:layout_height="wrap_content" android:paddingRight="5dp" android:text="2" android:textSize="20dp" /> <TextView android:id="@+id/bullet2Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="10dp" android:text="Second bullet. Second bullet. Second bullet. Second bullet. Second bullet. Second bullet. Second bullet. " android:textSize="15dp" /> </LinearLayout> 

Мы можем напрямую использовать LeadingMarginSpan

например

 String[] textArray = { "dfsdljjlfsdsdfjsdjldssdfidfsjdljasdfjfds\n", "sdfjdfjlkfdjdfkfjiwejojodljfldsjodsjfsdjdlf\n", "djsdfjsdffjdflljfjsadfdjfldfjl" }; SpannableStringBuilder content = new SpannableStringBuilder(); int number = 1; for (String t1 : textArray) { int contentStart = content.length(); String leadingString = number + ". "; content.append(leadingString); content.append(t1); int contentEnd = content.length(); content.setSpan( new LeadingMarginSpan.Standard(0, 66), contentStart, contentEnd, Spannable.SPAN_INCLUSIVE_EXCLUSIVE ); number++; }