How to search for a word in a string and highlight word in a text view in android?

前端 未结 3 793
广开言路
广开言路 2020-12-30 12:46

in my android application i have a string that contains a specific word so i want to display whole string in text view and the specific word should be highlighted.Hope follo

相关标签:
3条回答
  • 2020-12-30 13:01

    for each word, you can use:

    TextView textView = (TextView)findViewById(R.id.mytextview01);
    //use a loop to change text color
    Spannable WordtoSpan = new SpannableString("partial colored text");        
    WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(WordtoSpan);
    
    0 讨论(0)
  • 2020-12-30 13:04

    If I can understand you have the list of words and you want to find this words in text and highlight them so in this answer you have three input parameter:

    1. full text.
    2. yourList
    3. yourTextview to show the result text

      String text = "full of your text";
      Spannable textSpannable = new SpannableString(text);
      
      for (int j =0 ; j<yourList.size() ; j++) {
          //word of your list
          String word = String.valueOf(yourList.get(j));
          //find index of words
          for (int i = -1; (i = text.indexOf(word, i + 1)) != -1; i++) {
              //find the length of word for set color
              int last = i + word.length();
              //set text color with spannable
              textSpannable.setSpan(new BackgroundColorSpan(Color.parseColor("#0cab8f")),
                      i, last, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
          }
      }
      yourTextView.setText(textSpannable);
      
    0 讨论(0)
  • 2020-12-30 13:14

    Just to make it simple, here I post my methode

    . . . . . . . .

    First getting ready to use the methode

        ArrayList<String> searchWords = new ArrayList<String>(Arrays.asList("Second", "Scottish", "forces", "England"));
    
        String text = "1333 – Second War of Scottish Independence: The Scottish-held town of Berwick-upon-Tweed surrendered to English forces, ending a siege led by Edward III of England (depicted).";
    
    
        TextView sampleTextView = new TextView(currentContext); // currentContext = getContext();
    
        if (searchWords != null) {
            Spannable newText = setSpanHighlight(text, searchWords);
            sampleTextView.setText(newText, TextView.BufferType.SPANNABLE);
        }
        else{
            sampleTextView.setText(text);
        }
    

    The methode

        private Spannable setSpanHighlight(String text, @NonNull ArrayList<String> searchWord) {
        Spannable newText = new SpannableString(text);
    
        if (searchWord.size() != 0) {
            for (String word : searchWord){
                if (text.contains(word)){
                    int beginIndex = text.indexOf(String.valueOf(word)); //Unnecessary 'String.valueOf()' call => if you have something else than String
                    int endIndex = beginIndex + word.length();
    
                    newText.setSpan(
                            new ForegroundColorSpan(Color.BLUE),
                            beginIndex,
                            endIndex,
                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }
        return newText;
    }
    
    0 讨论(0)
提交回复
热议问题