有时候我们需要根据关键字截断文本内容,省略多余部分,比如微信搜索聊天记录时会在关键字的前后进行截断.
处理方式和逻辑见如下代码和注释:
private static void ellipsizeByKeyword(final TextView textView, String content, String keyword, boolean ignoreCase) {
TextPaint paint = textView.getPaint();
String compareContent = ignoreCase ? content.toLowerCase(Locale.ENGLISH) : content;
String compareKeyword = ignoreCase ? keyword.toLowerCase(Locale.ENGLISH) : keyword;
final int keywordStart = compareContent.indexOf(compareKeyword);
if (keywordStart < 0) {
// 找不到关键字
textView.setText(null);
return;
}
int maxLine = TextViewCompat.getMaxLines(textView);
if (maxLine <= 0) {
// 没有行数限制
textView.setText(content);
return;
}
// 每行文字的最大显示宽度
int availableWidth = textView.getWidth() - textView.getPaddingLeft() - textView.getPaddingRight();
// 区分单行和多行做不同的处理
if (maxLine < 2) {
// 单行
int availableCount =