【问题标题】:Display bold letters in listview fetched from sqlite DB在从 sqlite DB 获取的列表视图中显示粗体字母
【发布时间】:2021-06-02 12:34:10
【问题描述】:

我从 sqlite 数据库中获取数据。我想要的是用粗体显示我的每个产品的“名称”。

代码如下:

    fullProductDetails = "<b>Name: </b>"+data.getString(1) + "| Price: " + data.getString(2) + "| Quantity: " + data.getString(3);

问题是它在我的列表视图中显示的是“b”字符而不是粗体。

更新

这里还有一些代码:

Cursor data = mDatabaseHelper.getData();
        ArrayList<String> listData = new ArrayList<>();
        while (data.moveToNext()) {
            //get the value from the database in column 1
            //then add it to the ArrayList
            totalPrice=Float.parseFloat(data.getString(2))*Float.parseFloat(data.getString(3));
            fullProductDetails = "<b>Name: </b>"+data.getString(1) + "| Price: " + data.getString(2) + "| Quantity: " + data.getString(3);
            listData.add(fullProductDetails+" <b>Total Price: </b>"+totalPrice);
        }

//create the list adapter and set the adapter
        ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listData);
        mListView.setAdapter(adapter);

这是屏幕截图。你可以看到两次“B”,因为我正在测试其他东西。忽略第二个。

【问题讨论】:

  • 你能提供截图和更多代码吗?
  • @Renis1235 我已经更新了。让我知道你是否更清楚!
  • 你如何将元素添加到列表中,你也可以包括那个吗?

标签: java android sqlite


【解决方案1】:

HTML 格式的文本不适用于 Android 中的原生非网络 TextView。或任何其他非基于网络的框架/系统...

你应该用Spans格式化这个文本,这是推荐的方式,有很多可能性

但对于您的简单案例(仅处理粗体 &lt;b&gt; 标签),您可以使用 Html.fromHtml 方法

fullProductDetails = ...
Spanned fullProductDetailsSpanned = Html.fromHtml(fullProductDetails);
textView.setText(fullProductDetailsSpanned);

仔细阅读THIS(使用答案中发布的compat方法)和THIS(此方法仅支持少数标签,其余的将被剥离,但粗体在列表中)

【讨论】:

  • 感谢您的回答!我没有 textView 来显示这些!我只有 listView!
  • ListView 包含一些列表项,在您的情况下,这些是TextViews,由您设置的适配器提供。如果您有简单的实例,例如ArrayAdapter&lt;String&gt; 那么你可以迁移到ArrayAdapter&lt;Spannable&gt;(以及ArrayList&lt;String&gt; listData),但最好的选择是编写自己的适配器或至少覆盖getView() 方法
【解决方案2】:

试试这个:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml("<b>Name: </b>", Html.FROM_HTML_MODE_COMPACT));
} else { 
    textView.setText(Html.fromHtml("<b>Name: </b>"));
}

或直接:

textView.setText(Html.fromHtml("<b>Name: </b>"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多