Making text bold on a listview to a specify word dynamically

青春壹個敷衍的年華 提交于 2021-01-29 08:26:33

问题


I am trying to put color and bold up on a word that matches the word from a sentence in ArrayList items/value. what I have done so far is as below... so I have a String variable called filter "Hello" now I want to iterate through ArrayList itemList and find "Hello" from ArrayList items and make it bold and blue.

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);                 
    }             

its not working can you please help me


回答1:


You should make another constructor passing it another argument String filter which will contain your string to be bold.

Assign it to another data member in the arrayAdapter

Now while displaying the view, You should replace the filter in every sentence. i.e. sentence.replace(filter, "<b>" + filter + "</b>")

And show it into the textView like this myTextView.setText(Html.fromHtml(sentence));

After that all you have to do is Reset Adapter



来源:https://stackoverflow.com/questions/30545410/making-text-bold-on-a-listview-to-a-specify-word-dynamically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!