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

发布时间 - 2026-01-11 00:22:33    点击率:

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

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

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

效果图

首先自定义一个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中的文字部分加粗,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # textview加粗  # textview  # 文字加粗  # Android TextView自定义数字滚动动画  # Android实现数字跳动效果的TextView方法示例  # Android textview 实现长按自由选择复制功能的方法  # Android 中TextView的使用imageview被压缩问题解决办法  # Android中TextView文本高亮和点击行为的封装方法  # Android使用TextView跑马灯效果  # Android仿淘宝头条基于TextView实现上下滚动通知效果  # Android自定义竖排TextView实现实例  # 加粗  # 小编  # 还可以  # 在此  # 给大家  # 做一个  # 自定义  # 所述  # 给我留言  # 感谢大家  # 搜索功能  # 疑问请  # 有任何  # 完成了  # 博客  # void  # updateDrawState  # TextPaint  # Override  # extends 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何自定义建站之星网站的导航菜单样式?  Laravel如何处理表单验证?(Requests代码示例)  西安专业网站制作公司有哪些,陕西省建行官方网站?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  香港服务器租用费用高吗?如何避免常见误区?  如何在服务器上配置二级域名建站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何挑选优质建站一级代理提升网站排名?  深圳网站制作培训,深圳哪些招聘网站比较好?  高防服务器租用如何选择配置与防御等级?  Python图片处理进阶教程_Pillow滤镜与图像增强  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  PythonWeb开发入门教程_Flask快速构建Web应用  JS经典正则表达式笔试题汇总  Laravel如何生成API文档?(Swagger/OpenAPI教程)  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  如何快速生成橙子建站落地页链接?  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  如何用y主机助手快速搭建网站?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  b2c电商网站制作流程,b2c水平综合的电商平台?  Java解压缩zip - 解压缩多个文件或文件夹实例  Swift开发中switch语句值绑定模式  如何在服务器上三步完成建站并提升流量?  如何在IIS7中新建站点?详细步骤解析  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  新三国志曹操传主线渭水交兵攻略  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  简历在线制作网站免费版,如何创建个人简历?  如何在IIS中新建站点并配置端口与物理路径?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  在线制作视频的网站有哪些,电脑如何制作视频短片?  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何彻底删除建站之星生成的Banner?  如何为不同团队 ID 动态生成多个独立按钮  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何快速配置高效服务器建站软件?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析