如何检测 SpannableStringBuilder android 中的特定单词?
How to detect specific Words in SpannableStringBuilder android?
我想知道如何检测 SpannableStringBuilder
中的某些特定单词。
我的目的是改变这个词的颜色。
假设我有 SpannableStringBuilder span
并且列表包括我的单词,例如 "Name" 、 "Family" 、 "Location" 等
在这个阶段我想检查我的span
是否包括这些词然后改变颜色。
例如我想要这样的东西:
if(span.contain("Name")) // Change Color of the word "Name" every where in this span
if(span.contain("Family")) // Change Color of the word "Family" every where in this span
等等...
有什么方法可以检查吗?任何代码示例将不胜感激。
这是制作多种颜色和文字的方法:
SpannableStringBuilder builder = new SpannableStringBuilder();
String red = "this is red";
SpannableString redSpannable= new SpannableString(red);
redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, red.length(), 0);
builder.append(redSpannable);
String white = "this is white";
SpannableString whiteSpannable= new SpannableString(white);
whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, white.length(), 0);
builder.append(whiteSpannable);
String blue = "this is blue";
SpannableString blueSpannable = new SpannableString(blue);
blueSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, blue.length(), 0); builder.append(blueSpannable); mTextView.setText(builder, BufferType.SPANNABLE);
要查找单词索引,请执行以下操作:
int first = str.indexOf("hi");
int next = str.indexOf("hi", first+1);
执行此操作以获取所有索引并为它们着色
SpannableStringBuilder
中没有搜索方法,但您可以在将其转换为 String
:
后使用 indexOf()
Set<String> words = new HashSet<String>() {{
add("Name"); add("Family"); add("Location");
}};
String s = span.toString();
for (String word : words) {
int len = word.length();
// Here you might want to add a check for an empty word
for (int i = 0; (i = s.indexOf(word, i)) >= 0; i += len) {
span.setSpan(new ForegroundColorSpan(Color.BLUE), i, i + len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
我想知道如何检测 SpannableStringBuilder
中的某些特定单词。
我的目的是改变这个词的颜色。
假设我有 SpannableStringBuilder span
并且列表包括我的单词,例如 "Name" 、 "Family" 、 "Location" 等
在这个阶段我想检查我的span
是否包括这些词然后改变颜色。
例如我想要这样的东西:
if(span.contain("Name")) // Change Color of the word "Name" every where in this span
if(span.contain("Family")) // Change Color of the word "Family" every where in this span
等等...
有什么方法可以检查吗?任何代码示例将不胜感激。
这是制作多种颜色和文字的方法:
SpannableStringBuilder builder = new SpannableStringBuilder();
String red = "this is red";
SpannableString redSpannable= new SpannableString(red);
redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, red.length(), 0);
builder.append(redSpannable);
String white = "this is white";
SpannableString whiteSpannable= new SpannableString(white);
whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, white.length(), 0);
builder.append(whiteSpannable);
String blue = "this is blue";
SpannableString blueSpannable = new SpannableString(blue);
blueSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, blue.length(), 0); builder.append(blueSpannable); mTextView.setText(builder, BufferType.SPANNABLE);
要查找单词索引,请执行以下操作:
int first = str.indexOf("hi");
int next = str.indexOf("hi", first+1);
执行此操作以获取所有索引并为它们着色
SpannableStringBuilder
中没有搜索方法,但您可以在将其转换为 String
:
indexOf()
Set<String> words = new HashSet<String>() {{
add("Name"); add("Family"); add("Location");
}};
String s = span.toString();
for (String word : words) {
int len = word.length();
// Here you might want to add a check for an empty word
for (int i = 0; (i = s.indexOf(word, i)) >= 0; i += len) {
span.setSpan(new ForegroundColorSpan(Color.BLUE), i, i + len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}