在Android中以适当格式添加项目符号

7

我想在Android文本中显示项目符号。我已经成功地添加了它们。

我在互联网上搜索并发现可以添加项目符号。但是,如果文本超过一行,它不会像HTML列表那样遵循正确的间距。

请参见下面的屏幕截图。

输入图片描述

我使用以下代码添加项目符号。

String longDescription = "Enhanced bass performance.\n" +
                "Lightweight headband enhances comfort and adds durability\n" +
                "Easy to adjust headband ensures optimum fit and comfort\n" +
                "2 metre-long cable";

        String arr[] = longDescription.split("\n");
        StringBuilder desc = new StringBuilder();
        for (String s : arr){
            desc.append("<li>"+s+"</li>");
        }
        String newDesc = "<ul>"+desc+"</ul>";

        tvProdDesc.setText(Html.fromHtml(newDesc, null, new UlTagHandler()));

这里是我的

UlTagHandler.java


public class UlTagHandler implements Html.TagHandler {

    public void handleTag(boolean opening, String tag, Editable output,
                          XMLReader xmlReader) {
        if(tag.equals("ul") && !opening) output.append("\n");
        if(tag.equals("li") && opening) output.append("\n•\t");
    }
}

但是我希望文本能像文字处理器那样得到正确的格式。

我想要这种类型的输出

在此输入图片描述

我们能否做类似上面图片的事情?


不,这不是重复的。看,我已经加了项目符号。我想要格式良好的文本。 - Ashish Kudale
你提供哪个最低SDK版本? - deadfish
最小SDK版本为16,目标SDK版本为23。 - Ashish Kudale
@AshishKudale,您能修复一下您的主题标题吗?它与子弹有关。更改它很重要,因为这将对寻找解决方案的人们更有帮助。 - deadfish
当然,我会做到的。 - Ashish Kudale
1个回答

15

您对这个例子感到满意吗?

public class MainActivity extends AppCompatActivity {

    private TextView tvProdDesc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvProdDesc = (TextView) findViewById(R.id.text1);

        String longDescription = "Enhanced bass performance.\n" +
                "Lightweight headband enhances comfort and adds durability\n" +
                "Easy to adjust headband ensures optimum fit and comfort\n" +
                "2 metre-long cable";

        String arr[] = longDescription.split("\n");

        int bulletGap = (int) dp(10);

        SpannableStringBuilder ssb = new SpannableStringBuilder();
        for (int i = 0; i < arr.length; i++) {
            String line = arr[i];
            SpannableString ss = new SpannableString(line);
            ss.setSpan(new BulletSpan(bulletGap), 0, line.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            ssb.append(ss);

            //avoid last "\n"
            if(i+1<arr.length)
                ssb.append("\n");

        }

        tvProdDesc.setText(ssb);
    }

    private float dp(int dp) {
        return getResources().getDisplayMetrics().density * dp;
    }
}

结果:

在此输入图片描述


1
这适用于棉花糖版本吗?当我使用此代码时,我遇到了以下错误java.lang.NoSuchMethodError:在棉花糖版本中,类Landroid/text/style/BulletSpan;或其超类中没有直接方法<init>(III)V(“android.text.style.BulletSpan”的声明出现在/system/framework/framework.jar中)。有人可以帮忙吗? - Mariya
非常感谢。 - creativecoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接