欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 开发中根据搜索内容实现TextView中的文字部分加粗

程序员文章站 2023-11-23 12:00:46
实现方式没有引入任何依赖,轻量级实现需求效果 最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。 完成了这个功能后,写下此博客,记录一下实现过程 效果图...

实现方式没有引入任何依赖,轻量级实现需求效果

最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。

完成了这个功能后,写下此博客,记录一下实现过程

效果图

Android 开发中根据搜索内容实现TextView中的文字部分加粗

首先自定义一个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中的文字部分加粗,希望对大家有所帮助