2017-10-10 41 views
0

我想突出顯示某些帶有大小寫不敏感的顏色的文本背景。我嘗試了下面的代碼,但它不工作。它只在關鍵字小寫時突出顯示。在文本視圖中突出顯示某些文本背景,不區分大小寫

private static CharSequence highlightText(String search, String originalText) { 
    if (search != null && !search.equalsIgnoreCase("")) { 
     String normalizedText = Normalizer.normalize(originalText, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "").toLowerCase().; 
     int start = normalizedText.indexOf(search); 
     if (start < 0) { 
      return originalText; 
     } else { 
      Spannable highlighted = new SpannableString(originalText); 
      while (start >= 0) { 
       int spanStart = Math.min(start, originalText.length()); 
       int spanEnd = Math.min(start + search.length(), originalText.length()); 
       highlighted.setSpan(new BackgroundColorSpan(Color.YELLOW), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       start = normalizedText.indexOf(search, spanEnd); 
      } 
      return highlighted; 
     } 
    } 
    return originalText; 
} 

例如,我有一個原始文本=「我愛Stackoverflow」,關鍵字是「我愛」。我怎樣才能突出顯示「我愛」的文字背景,而不必將其改爲小寫,並維持案例。

enter image description here

謝謝。

回答

1

我從這裏的答案: Android: Coloring part of a string using TextView.setText()?

String notes = "aaa AAA xAaax abc aaA xxx"; 
SpannableStringBuilder sb = new SpannableStringBuilder(notes); 
Pattern p = Pattern.compile("aaa", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher(notes); 
while (m.find()){ 
//String word = m.group(); 
//String word1 = notes.substring(m.start(), m.end()); 

sb.setSpan(new ForegroundColorSpan(Color.rgb(255, 0, 0)), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
} 
editText.setText(sb); 
相關問題