Android 开发中根据搜索内容实现TextView中的文字部分加粗
程序员文章站
2023-11-23 12:00:46
实现方式没有引入任何依赖,轻量级实现需求效果
最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。
完成了这个功能后,写下此博客,记录一下实现过程
效果图...
实现方式没有引入任何依赖,轻量级实现需求效果
最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。
完成了这个功能后,写下此博客,记录一下实现过程
效果图
首先自定义一个stylespan,在stylespan里做加粗的等匹配状态的设置
@suppresslint("parcelcreator") public class searchstylespan extends stylespan { public searchstylespan(int style) { super(style); } @override public void updatedrawstate(textpaint ds) { ds.setfakeboldtext(true); //fixme 这里还可以做其他差异性设置(修改文字大小等) super.updatedrawstate(ds); } @override public void updatemeasurestate(textpaint paint) { paint.setfakeboldtext(true); super.updatemeasurestate(paint); } }
监听编辑框的内容变化
medittext.addtextchangedlistener(new textwatcher() { @override public void beforetextchanged(charsequence s, int start, int count, int after) { } @override public void ontextchanged(charsequence s, int start, int before, int count) { } @override public void aftertextchanged(editable editable) { checksearchcontent(medittext.gettext().tostring()); } });
通过循环,将textview 里的文字根据匹配内容分段
spannablestringbuilder searchstyle = new spannablestringbuilder(); int start; while (content.contains(searchcontent)) { start = content.indexof(searchcontent); searchstyle.append(getboldspannable(content.substring(0, start + searchcontent.length()), searchcontent)); content = content.substring(start + searchcontent.length()); } searchstyle.append(content);
将分段好的文字进行加粗处理
int start = content.indexof(searchcontent); spannablestringbuilder ssb = new spannablestringbuilder(content); ssb.setspan(new searchstylespan(typeface.normal), start, start + searchcontent.length(), spanned.span_exclusive_exclusive);
源码地址:https://github.com/titlezwc/boldspannable
以上所述是小编给大家介绍的android 开发中根据搜索内容实现textview中的文字部分加粗,希望对大家有所帮助