Yoa*_*ein 13 android list textview
我想在TextView中显示有序列表,例如:
1)项目1
2)项目2
使用以下布局:
<TextView
android:text="<ol><li>item 1\n</li><li>item 2\n</li></ol>
/>
Run Code Online (Sandbox Code Playgroud)
我明白了:
如何将项目符号更改为数字?
谢谢.
Håv*_*ard 10
我认为你必须在代码中这样做.我不得不将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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
抓住你的观点,并像这样使用它:
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);
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人寻找这个:-)
转到 res/values/strings.xml 然后粘贴以下代码
<string name="list">
<li>1) Item 1</li>\n
<li>2) Item 2</li>\n
<li>3) Item 3</li>\n
</string>
Run Code Online (Sandbox Code Playgroud)
然后转到包含 TextView 的布局文件并替换为以下代码
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/list" />
Run Code Online (Sandbox Code Playgroud)
我按照@jk2K 的回答 并修改了他的代码。由于我需要对每个要点进行缩进,
String[] textArray = {
"dfsdljjlfsdsdfjsdjldssdfidfsjdljasdfjfds\n",
"sdfjdfjlkfdjdfkfjiwejojodljfldsjodsjfsdjdlf\n",
"djsdfjsdffjdflljfjsadfdjfldfjl"
};
SpannableStringBuilder content = new SpannableStringBuilder();
int number = 1;
for (String t1 : textArray) {
int contentStart = content.length();
content.append(t1);
int contentEnd = content.length();
content.setSpan(
new BulletSpan(10),
contentStart,
contentEnd,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE
);
number++;
}
Run Code Online (Sandbox Code Playgroud)
我使用了android 库中的 BulletSpan 类,并将其替换new LeadingMarginSpan.Standard(0, 66)
为new BulletSpan(10)
创建宽度为 BulletSpan 的类。正如BulletSpan 类文档中提到的
BulletSpan(int gapWidth)
Creates a BulletSpan based on a gap width
Run Code Online (Sandbox Code Playgroud)
因此,您不再需要附加@jk2K 答案中提到的项目符号,
String leadingString = number + ". ";
content.append(leadingString);
Run Code Online (Sandbox Code Playgroud)
小智 1
您可以改用这种方式:
• foo<br/>
• bar<br/>
• baz<br/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13357 次 |
最近记录: |