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

(0)

相关推荐

  • Android中TextView文本高亮和点击行为的封装方法

    前言 相信大家应该都有所体会,对于一个社交性质的App,业务上少不了给一段文本加上@功能.话题功能,或者是评论上要高亮人名的需求.当然,Android为我们提供了ClickableSpan,用于解决TextView部分内容可点击的问题,但却附加了一堆的坑点: ClickableSpan 默认没有高亮行为,也不能添加背景颜色: ClickableSpan 必须配合 MovementMethod 使用 一旦使用 MovementMethod,TextView 必定消耗事件 当点击ClickableS

  • Android使用TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可.而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主

  • Android实现数字跳动效果的TextView方法示例

    前言 本文介绍的是Android如何实现数字跳动效果的TextView,主要运用了DancingNumberView,DancingNumberView是一个用于跳动显示文本中数字的控件,继承自TextView,这种控件一般用于显示金额等对用户较为敏感的数字,让UI交互更加生动. 它具有以下几点特性: 自动获取文本中的所有数字,并同时开始跳动,免去多个TextView拼接的麻烦 支持数字按照自定义的格式显示,例如限定只显示小数点后两位 效果图如下 导入使用 Gradle 第1步,在project

  • Android textview 实现长按自由选择复制功能的方法

    这里有一个大坑,我的viewGroup中有一个这个属性android:descendantFocusability="blocksDescendants" 开始没有注意到,试了好多方法都不行,后来才看到这个属性,顺便科普一下,这个属性有三个值~ beforeDescendants:viewgroup会优先其子类控件而获取到焦点 afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点 blocksDescendants:viewgroup会覆盖子类

  • Android自定义竖排TextView实现实例

    Android自定义竖排TextView实现实例 前言: 之前做联系人模块的时候遇到一个左侧索引控件,里面的字符都是竖直方向上排列的.当时这个控件是用一个图片代替的.现在想来如果索引的字符变更了,那么就得重新更换图片了,感觉很麻烦.今天通过一个自定义TextView实现类似的功能.先上效果图: 汉字和英文字符都可以竖直排列.结合联系人界面,可以将左侧的索引改成联系人的姓氏. 上代码: 测试用的Activity. public class MainActivity extends Activity

  • Android 中TextView的使用imageview被压缩问题解决办法

    Android 中TextView的使用imageview被压缩问题解决办法 看下运行效果图: 今天解bug的时候遇到一个奇怪的问题:listview的item由一个textview和一个imageview组成,父布局是线性水平排列.我的本意是imageview显示相同的图片,textview显示文本,但是运行程序后发现,当某个textview的文本较多时,imageview会被压缩,刚开始没注意,检查代码了好久. 代码示例如下: <!--文本少的item--> <LinearLayou

  • Android仿淘宝头条基于TextView实现上下滚动通知效果

    最近有个项目需要实现通知栏的上下滚动效果,仿淘宝头条的那种. 我从网上看了一些代码,把完整的效果做了出来.如图所示: 具体代码片段如下: 1.在res文件夹下新建anmin文件夹,在这个文件夹里创建两个文件 (1).anim_marquee_in.xml进入时动画 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/ap

  • Android TextView自定义数字滚动动画

    背景 在开发需求当中,当有总收益.总用户数等数字要显示时,为了更好的给用户提供展示效果,往往会想加入炫酷的数字滚动动画,使呆板平静的数字变得灵活起来,给人一种增值的直观感受. 简介 NumberRollingView是一个自定义的自带数字滚动动画的TextView,通过使用setContent(String str)方法进行数字字符串设置,传入相应的金额数字字符串(如"9686.86")或者整数数字字符串(如"968"),设置的数字必须是正数.当显示页面初始化完成的

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

    实现方式没有引入任何依赖,轻量级实现需求效果 最近遇到一个需求,需要做一个搜索功能.搜索的内容需要加粗显示. 完成了这个功能后,写下此博客,记录一下实现过程 效果图 首先自定义一个StyleSpan,在StyleSpan里做加粗的等匹配状态的设置 @SuppressLint("ParcelCreator") public class SearchStyleSpan extends StyleSpan { public SearchStyleSpan(int style) { super

  • Android开发之开门狗在程序锁中的应用实例

    本文实例讲述了Android开发之开门狗在程序锁中的应用方法.分享给大家供大家参考,具体如下: protected static final String TAG = "WatchDogService"; private AppLockDao dao; private List<String> lockApps; private ActivityManager am; private Intent lockappintent; @Override public IBinde

  • Android开发实现按钮点击切换背景并修改文字颜色的方法

    本文实例讲述了Android开发实现按钮点击切换背景并修改文字颜色的方法.分享给大家供大家参考,具体如下: 其实原理很简单,用到的是selector,用来设置android:background和android:textcolor属性,selector可以用来设置默认时候.点击时候的背景图片和文字颜色的属性,过程如下: 这两个文件如下: 1.当点击按钮,改变文字的颜色: <?xml version="1.0" encoding="utf-8"?> <

  • Android开发实现ListView和adapter配合显示图片和文字列表功能示例

    本文实例讲述了Android开发实现ListView和adapter配合显示图片和文字列表功能.分享给大家供大家参考,具体如下: 实际效果: 布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc

  • Android开发中的错误及解决办法总结

    目录 一 概述 二 错误类 2.1 Cannot inline bytecode built with JVM target 1.8 2.2 Unable to find EOCD signature 2.3 failed to read PNG signature: file does not start with PNG signature 2.4 Android Gradle plugin requires Java 11 to run. You are currently using J

  • Android开发之基本控件和四种布局方式详解

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

  • 使用WEB工具快速提高Android开发效率

    正所谓工欲善其事,必先利其器.学习并应用优秀的轮子,可以让我们跑的更快,走的更远.这里所指的工具是广义的,泛指能帮助我们开发的东西,或者能提高我们效率的东西,包括:开发工具,监测工具,第三方代码库等. 在Google的广大支持下,便捷开发Android程序的Native工具层出不穷.其实Android开发涉及到的范围也不小,一些Web工具有时候也会带来事半功倍的效果.有些甚至是一些native应用无法做到的.本文,将简单列举一下本人正在使用的一些工具,当然也会持续更新. 查找优秀的参考工程 co

  • Android UI设计系列之HTML标签实现TextView设置中文字体加粗效果(6)

    搞软件开发的都知道项目中各种需求都有,而有时候各种奇葩的需求真是让人大跌眼镜,为了实现这些奇葩的需求我们往往苦逼的废寝忘食,我现在的项目中就有一个应该算得上奇葩的需求吧,需求是这样的:在一段文字中实现对部分文字加粗 这个看上去也不难并且有点小儿科,因为TextView中有个属性是Android:textStyle,它其中一个值是bold,也就是说是对将要显示的文字进行加粗,于是我就在TextView控件中添加了此属性,代码如下: <TextView android:layout_width=&quo

  • Android开发微信小程序页面的图文教程

    初识Android Android是我们在日常生活中注视最久的,我们所使用的所有手机APP基本上都可以在Android上运行.而这次我们将开发一个app页面. Android Studio Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.大概就是一个开发工具. 项目介绍 我们会首先建立大概的框架,会将一个页面分为三个部分.下

  • 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗

    <div id='test' >fdsfsdf123</div> 如 $('#test1').fadeIn(1000) test 中的英文字符在动画效果结束前会加粗 解决方法: 为test层设上背景颜色

随机推荐