我知道这个帖子已经很老了,但如果有人想在TextView中突出显示字符串,我创建了一个库可以做到这一点。这是我在stackoverflow上回答问题的第一个答案,因为我刚刚加入,希望它格式正确并且相关。它使用SpannableString,并将定位您指定的字符串的所有出现。此外,内置了自定义ClickableSpan,如果需要,可以设置文本点击的监听器。
Linker
轻量级Android库,用于在TextView内突出显示字符串(不区分大小写),可选回调函数。
语言:Java
MinSDK:17
其功能图像和所有代码可以在
这里找到。
JavaDocs
要将其引入Android项目,请实现构件:
在项目级别的build.gradle中
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在应用级别的build.gradle文件中。
dependencies {
implementation 'com.github.Gaineyj0349:Linker:1.2'
}
使用方法:
1 - 使用TextView构建一个Linker对象:
Linker linker = new Linker(textView);
2-添加一个字符串数组或列表,用于在textview的文本中进行突出显示:
ArrayList<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
linker.addStrings(list);
AND/OR(与/或)
String[] words = new String[]{"One", "Two", "Three"};
linker.addStrings(words);
3 - 添加回调函数(这是可选的):
linker.setListener(new LinkerListener() {
@Override
public void onLinkClick(String charSequenceClicked) {
Toast.makeText(MainActivity.this, charSequenceClicked, Toast.LENGTH_SHORT).show();
}
});
4 - 调用链接器的更新方法来提交定制并推出设置。
linker.update();
你总是可以将字符串添加到链接器对象中,只需确保在刷新跨度之后调用更新方法。
linker.addStrings("yoda");
linker.update();
如果您需要一个新的板子并且具有相同的链接器对象,请调用
linker.clearLinksList()
您可以自定义链接的样式:
1 - 自定义所有链接的颜色:
linker.setAllLinkColors(Color.BLUE);
2 - 自定义链接下划线:
linker.setAllLinkUnderline(false);
3 - 如果您希望为某个字符串自定义颜色或下划线设置(请注意,该字符串必须已添加到链接器中):
linker.setLinkColorForCharSequence("world", Color.MAGENTA);
linker.setUnderlineModeForCharSequence("world", true);
4 - 如果您希望为每个单词使用不同的设置,则还可以将链接器对象提供的列表或数组LinkProfiles:
ArrayList<LinkProfile> profiles = new ArrayList<>();
profiles.add(new LinkProfile("hello world",
Color.GREEN, false));
profiles.add(new LinkProfile("goodbye cruel world",
Color.RED, false));
profiles.add(new LinkProfile("Whoa awesome!",
Color.CYAN, true));
linker.addProfiles(profiles);
请记得在链接器对象添加任何内容后调用.update()方法。
请注意,该库将处理诸如添加两个相同单词或相同单词部分等微妙问题。例如,如果"helloworld"和"hello"是添加到链接器中的两个单词,则当它们在相同的字符范围内时,"helloworld"将优先于"hello"。链接器将按照较大的单词排序,并跟踪所有跨度以链接它们 - 避免重复问题以及交叉跨度。
根据MIT许可证授权。