在不区分大小写的文本视图中突出显示某些文本背景
Highlight Certain Text Background In Text View With Case Insensitive
我想用不区分大小写的颜色突出显示某些文本背景。我尝试了下面的代码,但它不起作用。它仅在关键字为小写时突出显示。
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;
}
比如我有一个原文="I Love Whosebug",关键字是"i love"。如何突出显示 "i love" 的文本背景而不将其更改为小写并保持大小写。
谢谢。
我从这里得到了答案:
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 BackgroundColorSpan(Color.YELLOW), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
editText.setText(sb);
作为更新:
如果您在 TextView
上设置布局属性,例如 android:textAllCaps="true"
,它可能会覆盖用于设置高亮显示的 Spannable 字符串,看起来它不起作用。这很容易解决;只需以编程方式设置布局属性。
例如。 textView.setText(text.toUpperCase())
而不是 android:textAllCaps="true"
这将解决您的问题
String text = "I Love Whosebug";
String hilyt = "i love";
//to avoid issues ahead make sure your
// to be highlighted exists in de text
if( !(text.toLowerCase().contains(hilyt.toLowerCase())) )
return;
int x = text.toLowerCase().indexOf(hilyt.toLowerCase());
int y = x + hilyt.length();
Spannable span = new SpannableString(text);
span.setSpan(new BackgroundColorSpan(Color.YELLOW), x, y, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
yourTextView.setText(span);
秘密是将两个字符串的所有大小写都更改为小写,同时尝试使我们的文本的位置高亮显示。
我希望它会对某人有所帮助。
我想用不区分大小写的颜色突出显示某些文本背景。我尝试了下面的代码,但它不起作用。它仅在关键字为小写时突出显示。
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;
}
比如我有一个原文="I Love Whosebug",关键字是"i love"。如何突出显示 "i love" 的文本背景而不将其更改为小写并保持大小写。
谢谢。
我从这里得到了答案: 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 BackgroundColorSpan(Color.YELLOW), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
editText.setText(sb);
作为更新
如果您在 TextView
上设置布局属性,例如 android:textAllCaps="true"
,它可能会覆盖用于设置高亮显示的 Spannable 字符串,看起来它不起作用。这很容易解决;只需以编程方式设置布局属性。
例如。 textView.setText(text.toUpperCase())
而不是 android:textAllCaps="true"
这将解决您的问题
String text = "I Love Whosebug";
String hilyt = "i love";
//to avoid issues ahead make sure your
// to be highlighted exists in de text
if( !(text.toLowerCase().contains(hilyt.toLowerCase())) )
return;
int x = text.toLowerCase().indexOf(hilyt.toLowerCase());
int y = x + hilyt.length();
Spannable span = new SpannableString(text);
span.setSpan(new BackgroundColorSpan(Color.YELLOW), x, y, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
yourTextView.setText(span);
秘密是将两个字符串的所有大小写都更改为小写,同时尝试使我们的文本的位置高亮显示。 我希望它会对某人有所帮助。