Andriod给textview文本关键字循环标亮加粗

Android TextView字体分段加粗改变颜色的方法 SpannableString类是一个可以在文本上附加样式的字符串类,而SpannableStringBuilder类是SpannableString的子类,它可以进行更复杂的字符串操作。在示例中,我们将startIndex设置为9,endIndex设置为16,这意味着从第9个字符到第16个字符之间的文本将被加粗。最后,我们将spannableStringBuilder对象设置为TextView的文本,通过调用setText()方法来显示加粗和改变颜色的效果。在示例中,我们将文本的颜色设置为红色。 阅读详情

在开发中,搜索到得关键字信息在展示时,通常需要标亮加粗,如下图(截取自蓝鲸医生助手搜索后的结果)

  

  在文本中,关键字是“嘎”,所有“嘎”字都标亮加粗,标亮就是换种颜色。这里就要用到SpannableStringBuilder。首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。所以,总而言之,SpannableString、SpannableStringBuilder与String一样, 首先也是传字符串,但SpannableString、SpannableStringBuilder可以对这些字符串添加额外的样式信息,但String则不行。

  SpannableString和SpannableStringBuilder的区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,之后再无法更改String的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方法来拼接多个String:

  

复制代码
//使用SpannableString,只能作为构造函数参数传入 
SpannableString word = new SpannableString("欢迎光临lsc183的博客");  
  
//使用SpannableStringBuilder,可以使用append()再追加  
SpannableStringBuilder multiWord = new SpannableStringBuilder();  
multiWord.append("欢迎光临");  
multiWord.append("lsc183的");  
multiWord.append("博客");  
复制代码

  SpannableString和SpannableStringBuilder通过TextView.setText()设置给TextView。

  各种span设置:

  在前面的一个小示例,大家应该也可以看出,要应用一个Span总共分三步:
    1、构造String
    2、构造Span
    3、利用SetSpan()对指定范围的String应用这个Span

  1、字体颜色设置(ForegroundColorSpan)

复制代码
SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
//再构造一个改变字体颜色的Span  
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);    
//将这个Span应用于指定范围的字体  
spanString.setSpan(span, 1, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);    
//设置给EditText显示出来  
editText.setText(spanString);  
复制代码

  2、字体背景颜色(BackgroundColorSpan)

SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);    
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
editText.setText(spanString);  

  3、字体大小(AbsoluteSizeSpan)

SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);    
spanString.setSpan(span, 2, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);    
editText.setText(spanString);

  4、粗体、斜体(StyleSpan)

SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);    
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
editText.setText(spanString);  

  5、删除线(StrikethroughSpan)

SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
StrikethroughSpan span = new StrikethroughSpan();    
spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
editText.setText(spanString); 

  6、下划线(UnderlineSpan)

SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
UnderlineSpan span = new UnderlineSpan();    
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
editText.setText(spanString); 

  7、图片置换(ImageSpan)

SpannableString spanString = new SpannableString("欢迎光临lsc183的博客");    
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);    
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());    
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);    
spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
editText.setText(spanString);   

  如果要标亮的关键字不止一个,有多个呢,就像要标注“欢迎光临光临lsc183的博客,博客”,标注“博”呢,那就需要循环了。这里提供一个方法:

复制代码
public static void setTextviewColorAndBold(TextView textView, String key, String value) {
        if (TCommUtil.isNull(value)) {
            return;
        }
        if (!TCommUtil.isNull(key)) {
            SpannableStringBuilder style = new SpannableStringBuilder(value);
            int index = value.indexOf(key);
            if (index >= 0) {
                while (index < value.length() && index >= 0) {
                    style.setSpan(new ForegroundColorSpan(Color.rgb(0, 187, 33)), index, index + key.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    style.setSpan(new StyleSpan(Typeface.BOLD), index, index + key.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                    textView.setText(style);
                    index = value.indexOf(key, index + key.length());
                }
            } else {
                textView.setText(value);
            }

        } else {
            textView.setText(value);
        }
    }
复制代码

  注:key要标亮的关键字,value文本内容。

原文链接:http://www.cnblogs.com/lsc183/p/4460799.html

Android 根据搜索内容实现TextView中的文字部分加粗 立即下载

相关推荐

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

最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。实现方法很简单,下面通过本文给大家分享Android 开发中根据搜索内容实现TextView中的文字部分加粗样式,非常不错,需要的朋友参考下

YOLO目标检测算法:从原理到工业实践全解析

目标检测是计算机视觉的核心任务之一,其核心原理是通过算法自动识别图像中的物体位置和类别。不同于传统的两阶段检测方法,YOLO(You Only Look Once)创新性地将检测任务转化为单阶段回归问题,通过全卷积网络实现端到端预测,大幅提升了推理速度。这种设计在工业场景中展现出巨大价值,特别是在需要实时处理的视频分析、自动驾驶等领域。YOLO系列从v1到v8持续演进,通过多尺度特征融合、损失函数优化等技术不断提升检测精度。在实际部署中,结合TensorRT加速和模型量化技术,YOLO能在保持高精度的同时满

weixin_30718391的博客 482

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1123

Android之代码实现TextView的文字加粗

TextView代码实现文字加粗

verynewbeee的博客 1406

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 786

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

Android String.xml 设置加粗字体/修改字体颜色/动态设置修改文案

Android String.xml 设置加粗字体/修改字体颜色/动态设置修改文案

NewActivity的博客 3566

从编译到启动:RV1106嵌入式Linux系统构建的效率优化与深度实践

本文深入探讨RV1106嵌入式Linux系统构建的全流程优化策略,重点提升编译速度和驱动加载效率。通过并行编译配置、内核裁剪、驱动加载优化和硬件辅助加速等实践方法,显著缩短系统构建和启动时间,为嵌入式开发提供实用指导。

ttt77的博客 1032

Andriod的API

前言   关键字: Android API 中文文档,android sdk 中文,Android TextView 详解   像机械迷城游戏里的小工具一样——每一个控件都是我们手里一个有用的工具,由于时间的问题可以暂时先学会其基本用法,但是只要稍有时候还是需要系

sotsog的专栏 1022

(持续更新中!)详解【计算机类&面试真题】军队文职考试 ——第一期(真题+解析)| TCP、UDP的区别;程序局部性;ICMP协议及主要功能;重定位所需的计算机硬件

在当今信息化时代,军队中对于计算机专业人才的需求与日俱增。因此,了解面试和复试中常见的问题和要求对于准备应聘者来说至关重要。本文将围绕面试的准备要点、常见问题以及面试技巧进行探讨,并提供一些建议和经验。通过了解面试和复试的准备要点、常见问题以及技巧,读者将能够提升应对能力和成功率。本文为准备军队文职面试和计划考研复试的读者提供了有价值的参考和指导。通过阅读本篇博客,读者将能够获得关于军队文职计算机类面试和计算机考研复试的全面了解,提升自身的应对能力和成功率。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1690

YOLO26涨点改进 | 全网独家复现、小目标检测改进篇 | TGRS 2025 | YOLO26引入MFAE-YOLO中的GFFP、FCPS 和 C3k2-FPEU创新点,涨点起飞,直接发论文

🔥本文给大家介绍在YOLO26中引入MFAE-YOLO中的 GFFP(全局特征融合处理)、FCPS(特征通道像素注意力) 和 C3k2-FPEU(特征池提取单元) 二次创新改进模块,能显著提升对小目标的检测性能。GFFP通过多尺度特征融合增强全局上下文感知能力,有效提升小目标在复杂背景下的可辨性;FCPS融合通道、像素和空间注意力机制,增强了模型对关键细节和小区域特征的关注,提升检测精度;C2F-FPEU利用多种池化方式挖掘细节特征,优化浅层特征表示能力。三者协同提升了YOLO26在小目标检测中的鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 306

android 搜索自动匹配关键字并且标红

这个效果主要是为了着重表现搜索关键字的 。 1. 单关键字匹配 若只需匹配 搜索内容可以写的简单一些,代码如下: if (name != null && name.contains(mKeyWord)) { ...

weixin_30621919的博客 111

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1992

更改Android TextView标签的文字

[code="java"]mTextView01 = (TextView)this.findViewById(R.id.myTextView01); String str_2 = "欢迎来到Andorid的TextView世界..."; mTextView01.setText(str_2);[/code]

默默 357

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设置TextView的字体颜色的方法

对于setTextView(int a)这里的a是传进去颜色的值。例如,红色0xff0000是指0xff0000如何直接传入R.color.red是没有办法设置颜色的,只有通过文章中的第三种方法先拿到资源的颜色值再传进去。  tv.setTextColor(this.getResources().getColor(R.color.red)); 关键字: android textview col

guobing965816的专栏 1138

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android自定义控件之全文收起TextView(控件嵌套法)

http://www.tuicool.com/articles/NNVZzuU http://www.tuicool.com/articles/NNVZzuU http://www.tuicool.com/articles/NNVZzuU http://www.tuicool.com/articles/NNVZzuU Android自定义控件之全文收

647

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android TextView自定义实现@用户跳转

Textview能满足简单的文字展示,其中可以设置自动索引链接,邮箱等。但有时候我们需要对TextView进行更丰富的展现原本的就很难满足需求。例如各种标注,特殊文字高亮,关键字链接。     项目中需要用到对@用户的链接。所以楼主就去研究了一下Textview。结果发现使用Spannable接口能很好的实现对textview的拓展。而且android SDK提供了很多实现类。 先看一

三杯五岳 543

android按钮设置下划线,Android开发如何给textView设置下划线或中划线

关键字:android,android开发,下划线,中划线我们在开发应用的时候,尤其是在做商城项目的时候,需要用到原价格以及降价后的价格,这就不可避免用到中划线或者下划线,在原价格上做一个中划线,这样效果更好.那么如何设置中划线或者下划线呢?请看本文.如果喜欢,你还可以访问以下地址,寻找更多相关信息:学习网:生态农业:古诗词网:中国历史:自我介绍网:语文网:数学网:1.textView设置下划线t...

weixin_33218378的博客 1808

Andriod应用开发--第三章作业1--习题答案

微信搜索【三桥君 】,回复【安卓答案】即可获得“《Android移动应用基础教程(Android Studio)(第2版)》”课后题所有答案。

三桥君 | 人工智能领域专家 7056

android给部分文字添加下滑线, 点击功能

项目中遇到需要给一段方案中的几个字加下滑线,并且点击这几个文字,跳转到另一个页面的功能。 不多说了,直接上代码。 第一步,创建工具类。TextViewSpannableUtils.java public class TextViewSpannableUtils { private static ClickableSpanCallBack mClickableSpanCallBac...

rhj的专栏 629

Android Studio按钮响应事件(二)

Android Studio按钮响应事件(二)通过接口方式实现(implements )一、功能二、代码 通过接口方式实现(implements ) 一、功能 1、点击按钮“增大字体”,增大文本框文字 2、点击按钮“减小字体”,缩小文本框文字 二、代码 activity_main.xml        此处与方法一写法相同...

爱吃芒果的薯条 的博客 355

android 遍历所有文件夹和子目录搜索文件

java代码: import java.io.File; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import ...

weixin_30555125的博客 554

第2章 Android应用的界面编程

本章主要介绍了Android程序中的界面编程,先介绍基本的界面和视图的使用方式,接着讲解6种常用的布局管理器,最后讲解了六种常用的UI组件。学习完本章内容,大家需动手进行实践,为后面学习打好基础。

2302_76674204的博客 1120
上一篇: Animation动画中rotate scale的 pivot属性
下一篇: SwitchButton 开关按钮 的多种实现方式
hookfeng
博客等级 码龄12年 4粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值