java - 动态地将 ListView 上的文本加粗到指定单词

标签 java android listview arraylist spannable

我正在尝试对与 ArrayList 项目/值中的句子中的单词匹配的单词添加颜色和粗体。到目前为止我所做的如下......所以我有一个名为过滤器“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);                 
    }             

它不起作用,你能帮我吗

最佳答案

您应该创建另一个构造函数,传递另一个参数 String filter其中将包含要加粗的字符串。

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

现在在显示 View 时, 您应该替换 filter在每句话中。即sentence.replace(filter, "<b>" + filter + "</b>")

并将其显示到 textView 中,如下所示 myTextView.setText(Html.fromHtml(sentence));

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

关于java - 动态地将 ListView 上的文本加粗到指定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30545410/

相关文章:

java - JLS 如何指定术语 "abstract method"、 "concrete method"和 "default method"?

java - 从数据库获取数据时ArrayIndexOutOfBounds异常问题

mysql - 如何通过水平滚动从数据库填充xamarin表单gridview数据

Javadoc 源代码标记

java - Springs XmlBeanFactory 已弃用

java - 启动 map Activity 的正确方法?

java - ListView 与折叠工具栏重叠

java - 为什么按钮在 textview 全文之后隐藏?

java - 从同一公司网站的不同域获取 cookie

android - Visual Studio 2015 中的 Xamarin MultiDex