【问题标题】:Making text bold on a listview to a specify word dynamically将列表视图上的文本加粗到动态指定的单词
【发布时间】:2015-08-13 06:06:39
【问题描述】:

我正在尝试在与 ArrayList 项目/值中的句子匹配的单词上添加颜色和粗体。到目前为止我所做的如下......所以我有一个名为 filter "Hello" 的字符串变量,现在我想遍历 ArrayList itemList 并从 ArrayList 项目中找到 "Hello" 并将其设为粗体和蓝色。

String filter = "Hello";
    String itemValue = "I just want to say Hello world! Hello";

    itemList = new ArrayList<String>();
    for(int i = 0; i<10; i++)
    {
        itemList.add("I just want to say Hello world! Hello");
    }
    sentence = new ArrayList<String>();
    for(int j=0; j<itemList.size(); j++)
    {
        int startPos = itemList.get(j).toString().toLowerCase(Locale.US).indexOf(filter.toLowerCase(Locale.US));
        int endPos = startPos + filter.length();

        if (startPos != -1) // This should always be true, just a sanity check
        {
            Spannable spannable = new SpannableString(itemValue);
            ColorStateList blueColor = new ColorStateList(new int[][] { new int[] {}}, new int[] { Color.BLUE });
            TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, blueColor, null);

            spannable.setSpan(highlightSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            tv.setText(spannable);

            sentence.add(itemValue);

            ListView lv = (ListView)findViewById(R.id.listView1);
            //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
              //      android.R.layout.simple_list_item_1, android.R.id.text1, sentence);
            MyPerformanceArrayAdapter adapter = new MyPerformanceArrayAdapter(this, spannable, counterArrayList);
            lv.setAdapter(adapter);
        }
        else
            tv.setText(itemValue);                 
    }             

它不工作你能帮帮我吗

【问题讨论】:

  • 你应该使用自定义的 ListView 适配器
  • MyPerformanceArrayAdapter 是我的自定义列表视图适配器。我该怎么做,你能帮帮我吗

标签: java android listview arraylist spannable


【解决方案1】:

您应该创建另一个构造函数,将另一个参数 String filter 传递给它,该参数将包含您的粗体字符串。

将其分配给arrayAdapter中的另一个数据成员

现在在显示视图时, 您应该替换每个句子中的filter。即sentence.replace(filter, "&lt;b&gt;" + filter + "&lt;/b&gt;")

并像这样myTextView.setText(Html.fromHtml(sentence));将其显示到textView中

之后您所要做的就是重置适配器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多