如何将项目符号列表添加到Android应用程序?

我GOOGLE了我的问题,但没有提供工作的答案。 如何添加项目列表到我的文本视图。

由于不支持ul / li / ol,因此难以做到。 幸运的是,您可以将其用作语法糖:

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

&#8226; 是列表项目符号的html实体更多的select在这里http://www.elizabethcastro.com/html/extras/entities.html

更多关于Mark Murphy(@CommonsWare)提供的支持哪些标签http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html用Html.fromHtml加载;

 ((TextView)findViewById(R.id.my_text_view)).setText(Html.fromHtml(myHtmlString)); 
  1. 浏览器解释HTML的方式很好。 提供的解决scheme与HTML实体可以是有用的。 但它只包括子弹。 如果您的文字包装,缩进将不正确。

  2. 我发现其他解决schemeembedded一个Web视图。 这可能适合某些人,但我认为它的矫枉过正…(与使用列表视图相同)

  3. 我喜欢纳尔逊的创造性方法 :D,但它不会给你添加一个无序列表到文本视图的可能性。

  4. 使用BulletSpan的项目 符号的无序列表示例

     CharSequence t1 = getText(R.string.xxx1); SpannableString s1 = new SpannableString(t1); s1.setSpan(new BulletSpan(15), 0, t1.length(), 0); CharSequence t2 = getText(R.string.xxx2); SpannableString s2 = new SpannableString(t2); s2.setSpan(new BulletSpan(15), 0, t2.length(), 0); textView.setText(TextUtils.concat(s1, s2)); 

正:

  • 文本包装后正确缩进的子弹。
  • 您可以在TextView的一个实例中组合其他格式化或未格式化的文本
  • 您可以在BulletSpan构造函数中定义缩进应该有多大。

负:

  • 您必须将列表中的每个项目保存在单独的string资源中。 所以你不能在HTML中定义你的列表。

我find了一个备用..只是复制这个项目符号“•”(这是一个文本),并粘贴在您的文本视图的文本,您可以通过更改文本颜色以及所有其他属性,如大小,高度宽度更改项目符号的颜色。 .. 🙂

你可以使用捷径来打字的时候得到这个子弹

为窗口

ALT + 7

为mac

ALT + 8

受到这里各种答案的启发,我创build了一个Utility类,使其成为一个简单的class轮 。 这将创build一个包含文本的缩进列表。 它具有组合string,string资源和string数组资源的方法。

它会创build一个可以传递给TextView的CharSequence。 例如:

 CharSequence bulletedList = BulletListUtil.makeBulletList("First line", "Second line", "Really long third line that will wrap and indent properly."); textView.setText(bulletedList); 

希望这是有帮助的。 请享用。

注意:这将使用系统标准项目符号,与文本颜色相同的小圆圈。 如果你想要一个自定义项目符号,可以考虑drawLeadingMargin()并重写它的drawLeadingMargin()来绘制你想要的项目符号。 看看BulletSpan的来源 ,了解它是如何工作的。

 public class BulletTextUtil { /** * Returns a CharSequence containing a bulleted and properly indented list. * * @param leadingMargin In pixels, the space between the left edge of the bullet and the left edge of the text. * @param context * @param stringArrayResId A resource id pointing to a string array. Each string will be a separate line/bullet-point. * @return */ public static CharSequence makeBulletListFromStringArrayResource(int leadingMargin, Context context, int stringArrayResId) { return makeBulletList(leadingMargin, context.getResources().getStringArray(stringArrayResId)); } /** * Returns a CharSequence containing a bulleted and properly indented list. * * @param leadingMargin In pixels, the space between the left edge of the bullet and the left edge of the text. * @param context * @param linesResIds An array of string resource ids. Each string will be a separate line/bullet-point. * @return */ public static CharSequence makeBulletListFromStringResources(int leadingMargin, Context context, int... linesResIds) { int len = linesResIds.length; CharSequence[] cslines = new CharSequence[len]; for (int i = 0; i < len; i++) { cslines[i] = context.getString(linesResIds[i]); } return makeBulletList(leadingMargin, cslines); } /** * Returns a CharSequence containing a bulleted and properly indented list. * * @param leadingMargin In pixels, the space between the left edge of the bullet and the left edge of the text. * @param lines An array of CharSequences. Each CharSequences will be a separate line/bullet-point. * @return */ public static CharSequence makeBulletList(int leadingMargin, CharSequence... lines) { SpannableStringBuilder sb = new SpannableStringBuilder(); for (int i = 0; i < lines.length; i++) { CharSequence line = lines[i] + (i < lines.length-1 ? "\n" : ""); Spannable spannable = new SpannableString(line); spannable.setSpan(new BulletSpan(leadingMargin), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); sb.append(spannable); } return sb; } } 

我使用的一个选项是使用样式设置子弹drawable。

 <style name="Text.Bullet"> <item name="android:background">@drawable/bullet</item> <item name="android:paddingLeft">10dp</item> </style> 

用法:

 <TextView android:id="@+id/tx_hdr" android:text="Item 1" style="@style/Text.Bullet" /> 

使用复合可绘制的简单TextView。 例如

 <TextView android:text="Sample text" android:drawableLeft="@drawable/bulletimage" > </TextView> 

这是迄今为止最简单的..

 <string name="bullet_ed_list">\n\u2022 He has been Chairman of CFL Manufacturers Committee of ELCOMA, the All India Association of Lighting Equipment Manufacturers. \n\u2022 He has been the President of Federation of Industries of India (FII).</string> 

这是一个带有标题和每个项目前面一个标签的项目符号列表。

 public class BulletListBuilder { private static final String SPACE = " "; private static final String BULLET_SYMBOL = "&#8226"; private static final String EOL = System.getProperty("line.separator"); private static final String TAB = "\t"; private BulletListBuilder() { } public static String getBulletList(String header, String []items) { StringBuilder listBuilder = new StringBuilder(); if (header != null && !header.isEmpty()) { listBuilder.append(header + EOL + EOL); } if (items != null && items.length != 0) { for (String item : items) { Spanned formattedItem = Html.fromHtml(BULLET_SYMBOL + SPACE + item); listBuilder.append(TAB + formattedItem + EOL); } } return listBuilder.toString(); } } 

完全矫枉过正,并做了一个自定义文本视图。

像这样使用它:

 <com.blundell.BulletTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="--bullet 1 --bullet two --bullet three --bullet four" /> 

和代码:

 package com.blundell; import android.content.Context; import android.text.Html; import android.util.AttributeSet; import android.widget.TextView; public class BulletTextView extends TextView { private static final String SPLITTER_CHAR = "--"; private static final String NEWLINE_CHAR = "<br/>"; private static final String HTML_BULLETPOINT = "&#8226;"; public BulletTextView(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.textViewStyle); } public BulletTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); checkForBulletPointSplitter(); } private void checkForBulletPointSplitter() { String text = (String) getText(); if (text.contains(SPLITTER_CHAR)) { injectBulletPoints(text); } } private void injectBulletPoints(String text) { String newLinedText = addNewLinesBetweenBullets(text); String htmlBulletText = addBulletPoints(newLinedText); setText(Html.fromHtml(htmlBulletText)); } private String addNewLinesBetweenBullets(String text) { String newLinedText = text.replace(SPLITTER_CHAR, NEWLINE_CHAR + SPLITTER_CHAR); newLinedText = newLinedText.replaceFirst(NEWLINE_CHAR, ""); return newLinedText; } private String addBulletPoints(String newLinedText) { return newLinedText.replace(SPLITTER_CHAR, HTML_BULLETPOINT); } } 

我觉得这是最简单的方法,将textView保留在xml文件中并使用下面的java代码。 它对我来说工作得很好。

 private static final String BULLET_SYMBOL = "&#8226"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tutorial); TextView tv = (TextView) findViewById(R.id.yourTextView); tv.setText("To perform this exercise you will need the following: " + System.getProperty("line.separator")//this takes you to the next Line + System.getProperty("line.separator") + Html.fromHtml(BULLET_SYMBOL + " Bed") + System.getProperty("line.separator") + Html.fromHtml(BULLET_SYMBOL + " Pillow")); } 

这是另一个解决scheme,不是完全向一个textview添加列表,但我想目标是相同的。 它使用TableLayout,只需要XML,对于小的有序列表或无序列表来说非常简单。 下面是我使用的示例代码,而不是Java中的一行代码。

正:

  • 你可以把任何你喜欢的表格行,不一定是一个文本视图
  • 你可以使用它来创build项目符号和编号列表或其他
  • 您可以使用填充或layout_weight定义缩进

负:

  • 单调乏味的列表(除非你用正则expression式使用一些狡猾的文本编辑器)
  • 每个列表项都是作为单独的string资源存储的

      <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView style="@style/helpPagePointsStyle" android:layout_weight="0.2" android:text="1." /> <TextView style="@style/helpPagePointsStyle" android:layout_weight="3" android:text="@string/help_points1" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView style="@style/helpPagePointsStyle" android:layout_weight="0.2" android:text="2." /> <TextView style="@style/helpPagePointsStyle" android:layout_weight="3" android:text="@string/help_points2" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView style="@style/helpPagePointsStyle" android:layout_weight="0.2" android:text="3." /> <TextView style="@style/helpPagePointsStyle" android:layout_weight="3" android:text="@string/help_points3" /> </TableRow> </TableLayout> 

和风格:

 <style name="helpPagePointsStyle"> <item name="android:layout_width">0dp</item> <item name="android:layout_height">wrap_content</item> <item name="android:gravity">left</item> </style> 

你有两个选项来做一个项目符号列表

  • 使用html(ul,ol)创build列表,并将html加载到WebView中
  • 将数据加载到ListView中,并在列表项目布局中将文本视图的左侧可绘制对象设置为适合该项目符号的图像。

选项1是最简单的。

使用string资源中的<ul><li>标签可以简单地创build项目符号列表。

不要使用 setText(Html.fromHtml(string))来设置代码中的string! 只需在xml中设置string或使用setText( string )即可。

例如:

strings.xml文件

 <string name="str1"><ul> <li><i>first</i> item</li> <li>item 2</li> </ul></string> 

layout.xml文件

  <TextView android:text="@string/str1" /> 

它会产生以下结果:

  • 第一
  • 第2项

以下标签支持(直接embeddedstring资源):

  • <a>(支持属性“href”)
  • <注释>
  • <B>
  • <大>
  • <font>(支持属性“height”,“size”,“fgcolor”和“bicolor”,作为整数)
  • <I>
  • <LI>
  • <选取框>
  • <小>
  • <击>
  • <子>
  • <SUP>
  • <tt>的
  • <U>

另一种支持缺lessHTML标签的方式是通过很好地replace它们,如下所示