Android Spanned实现TextView富文本效果(1)--文字

一文讲透Android Span的原理 在生活中,我们总能看到很多特殊的文本效果,例如文本引用、关键字标红加粗、应用内自定义表情等等。通过 **Span** ,我们可以实现上述这些文字效果。 阅读详情

1.首先实例化一个Spannable对象

SpannableString spannableString = new SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");

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

2.public void setSpan (Object what, int start, int end, int flags)

  • what传入各种Span类型的实例
  • start和end标记要替代的文字内容的范围
  • flags是用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果

第一个参数可以使用的主要几种Span类型为

  • ImageSpan 可以使用图片替换文字达到图文混排的效果,例如在微信中文字和表情一起发的状态

    • 使用方法

    Drawabledrawable=mContext.getResources().getDrawable(R.drawable.new_topic_drawable);
    drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
    ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
    spanString.setSpan(imageSpan,spanString.length()-1,spanString.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE);

  • ForegroundColorSpan 设置文字前景色,即文字本身的颜色
    • spanString.setSpan(new ForegroundColorSpan(Color.parseColor("#f74224")), 0,titleText.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
  • AbsoluteSizeSpan 设置文字的绝对大小值,参数是绝对数值
    • spanString.setSpan(new AbsoluteSizeSpan(11),0,spanString.length(),titleText.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
  • RelativeSizeSpan(float proportion) 设置字体大小,参数是相对于默认字体大小的倍数。
  • UrlSpan 设置超链接
    • URLSpan span = new URLSpan("tel:0123456789");
    • spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  • BackgroundColorSpan 设置文字背景色
    • BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
    • spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  • StyleSpan 字体设置
    • StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
    • spanString.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    • Typeface中有四个Style常量,分别是BOLD粗体、ITALIC斜体、BOLD_ITALIC粗斜体、NORMAL正常
  • StrikethroughSpan 删除线
    • StrikethroughSpan span = new StrikethroughSpan();spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  • UnderlineSpan 下划线
    • UnderlineSpan span = new UnderlineSpan();
    • spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

在具体实践中可以对同一范围内的文字叠加不同的span,如文字的大小和文字的颜色可以叠加使用,可以组合出不同的效果

第二,三个参数 (int start, int end)

这里是指个性化匹配的位置:这里有很多种方式去实现,例如直接写死位置,也可以和String类的一些方法配合使用,比如:indexOf(),也可以写个正则匹配方法,如果要匹配多次可以把这些匹配存入一个Map集合

第四个参数Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的意义:

标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果

  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)
  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)
  • Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)
  • Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)

3.将SpannableString设置到TextView

mTextView.setText(msp);

4.最后调用.setMovementMethod,此方法在需要响应用户事件时使用,如点击一个电话号码就跳转到拨号页面。如果不执行这个方法是不会响应事件的,即便文本看着已经是下划线蓝色字了。

mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

参考链接

http://blog.youkuaiyun.com/xijiaohuangcao/article/details/7839856

http://www.cnblogs.com/lichenwei/p/4411607.html

另外几种给TextView加上效果的方法

http://aichixihongshi.iteye.com/blog/1207503

下面附上两段完整代码展示用法

     /**
     * 在Android里提供了许多个性化TextView内容的工具类, 使用这些类可以代替常规String。
     * android.text.Spanned
     * android.text.SpannableString
     * android.text.SpannableStringBuilder
     *
     * 由于Spannable等类最终都实现了CharSequence接口,所以可以直接把SpannableString和SpannableStringBuilder通过TextView.setText()设置给TextView。
     */

    //实例化一个Spannable对象
    SpannableString spannableString = new SpannableString(info);
    //通过setSpan()方法可以用来定义不同的样式内容
    //设置字体
    //方式一:直接定位
    spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //方式二:配合String工具类定位
    spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), info.indexOf("@"), info.indexOf(" "), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //方式三,利用正则表达式匹配定位
    Map<String, Integer> map = getHttpPostion();
    spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), map.get("start"), map.get("end"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    //设置字体大小
    spannableString.setSpan(new RelativeSizeSpan((float) 1.5), map.get("start"), info.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    //设置图片表情
    Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    spannableString.setSpan(new ImageSpan(drawable), info.indexOf("["), info.indexOf("]") + 1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

    textView.setText(spannableString);
}

public Map<String, Integer> getHttpPostion() {
    Map<String, Integer> map = new HashMap<String, Integer>();
    Pattern pattern = Pattern.compile("http:.*");
    Matcher matcher = pattern.matcher(info);
    if (matcher.find()) {
        map.put("start", matcher.start());
        map.put("end", matcher.end());
    }
    return map;

}

第二段

 mTextView = (TextView) findViewById(R.id.tv_link);

    //创建一个 SpannableString对象
    msp = new SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");

    //设置字体(default,default-bold,monospace,serif,sans-serif)
    msp.setSpan(new TypefaceSpan("monospace"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    msp.setSpan(new TypefaceSpan("serif"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    //设置字体大小(绝对值,单位:像素)
    msp.setSpan(new AbsoluteSizeSpan(20), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    msp.setSpan(new AbsoluteSizeSpan(20, true), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。

    //设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
    msp.setSpan(new RelativeSizeSpan(0.5f), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //0.5f表示默认字体大小的一半
    msp.setSpan(new RelativeSizeSpan(2.0f), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示默认字体大小的两倍

    //设置字体前景色
    msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置前景色为洋红色

    //设置字体背景色
    msp.setSpan(new BackgroundColorSpan(Color.CYAN), 15, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置背景色为青色

    //设置字体样式正常,粗体,斜体,粗斜体
    msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常
    msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗体
    msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜体
    msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜体

    //设置下划线
    msp.setSpan(new UnderlineSpan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    //设置删除线
    msp.setSpan(new StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    //设置上下标
    msp.setSpan(new SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下标
    msp.setSpan(new SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上标

    //超级链接(需要添加setMovementMethod方法附加响应)
    msp.setSpan(new URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话
    msp.setSpan(new URLSpan("mailto:webmaster@google.com"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件
    msp.setSpan(new URLSpan("http://www.baidu.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络
    msp.setSpan(new URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:
    msp.setSpan(new URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:
    msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图

    //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
    msp.setSpan(new ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变

    //设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)
    ColorStateList csllink = null;
    ColorStateList csl = null;
    XmlResourceParser xppcolor=getResources().getXml (R.color.color);
    try {
        csl= ColorStateList.createFromXml(getResources(),xppcolor);
    }catch(XmlPullParserException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }

    XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor);
    try {
        csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor);
    }catch(XmlPullParserException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }
    msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 51, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    //设置项目符号
    msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH, Color.GREEN), 0, msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色

    //设置图片
    Drawable drawable = getResources().getDrawable(R.drawable.icon);
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    msp.setSpan(new ImageSpan(drawable), 53, 57, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    mTextView.setText(msp);
    mTextView.setMovementMethod(LinkMovementMethod.getInstance());

下面还有高仿新浪微博的效果,下次再看
http://www.tuicool.com/articles/aIFZf2e

附上属性

  • BackgroundColorSpan 背景色
  • ClickableSpan 文本可点击,有点击事件
  • ForegroundColorSpan 文本颜色(前景色)
  • MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
  • MetricAffectingSpan 父类,一般不用
  • RasterizerSpan 光栅效果
  • StrikethroughSpan 删除线(中划线)
  • SuggestionSpan 相当于占位符
  • UnderlineSpan 下划线
  • AbsoluteSizeSpan 绝对大小(文本字体)
  • DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
  • ImageSpan 图片
  • RelativeSizeSpan 相对大小(文本字体)
  • ReplacementSpan 父类,一般不用
  • ScaleXSpan 基于x轴缩放
  • StyleSpan 字体样式:粗体、斜体等
  • SubscriptSpan 下标(数学公式会用到)
  • SuperscriptSpan 上标(数学公式会用到)
  • TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
  • TypefaceSpan 文本字体
  • URLSpan 文本超链接
Android Textview 支持ClickableSpan(富文本) *亲测成功 *支持Textview设置富文本点击 *设置Textview 中部分字设置可以点击、变色,设置setMovementMethod(LinkMovementMethod.getInstance())后滑动与Textview局部点击冲突...都已经解决. *解决点击空白区域依然有点击事件 *已经封装成工具类,可以支持次格式化继续转化点击、变色 立即下载

相关推荐

ControlCAN.dll开发适配USBCAN_E/2E_U设备

摘要:本文提供了USBCAN_E/2E_U设备的配置指南:1)安装专用驱动;2)获取最新的ControlCAN.dll文件;3)修改VCI调用顺序,新增VCI_SetReference函数设置波特率;4)使用工具计算波特率配置值,并给出了常见波特率对应的代码参考值(如500K对应0x060007)。配置过程强调使用特定工具计算精确的波特率参数,并提供了相关软件下载链接。

weixin_43969033的博客 387

[Android基础]Spanned与SpannableString

Spanned SPAN_EXCLUSIVE_EXCLUSIVE  等同于  (  ) SPAN_EXCLUSIVE_INCLUSIVE  等同于  (  ] SPAN_INCLUSIVE_EXCLUSIVE  等同于  [  ) SPAN_INCLUSIVE_INCLUSIVE  等同于  [  ] SpannableString

宏哥的博客 1万+

TSP、MTSP问题遗传算法详细解读及python实现

写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网

weixin_47675950的博客 9305

SpannableString与SpannableStringBuilder

一、简介1、SpannableString、SpannableStringBuilder与String的关系首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来S

AfinalStone的专栏 629

FreeRTOS:卡在configASSERT( ( pxQueue ) )问题的解决

FreeRTOS卡在configASSERT( ( pxQueue ) )问题的解决

qq_42007164的博客 9563

HTB Attacking GraphQL Skills Assessment

通过枚举应用,利用GraphQL API,发现sql注入点,然后利用找到flag。

qq_33522010的博客 452

android中span,Android Span富文本简单使用 - Spannable

###为文字实现很丰富的特殊效果,下面来实现几种很常用的操作so... 直接上效果:​先简单介绍下Spanable中的常用常量:Spanned.SPAN_EXCLUSIVE_EXCLUSIVE -- 不包含start和end所在的端点 (a,b)Spanned.SPAN_EXCLUSIVE_INCLUSIVE -- 不包含端start,但包含end所在的端点 ...

weixin_34963576的博客 748

半导体材料仿真:二维材料仿真_(1).二维材料的基本概念

在半导体材料仿真领域,二维材料因其独特的物理和化学性质而受到广泛关注。二维材料,也称为二维纳米材料,是指在二维空间(通常是平面)上具有原子级厚度的材料。这些材料的厚度通常在几个纳米甚至单个原子层的范围内,使得它们在电子、光学、热学和机械性能上表现出与传统三维材料显著不同的特性。本节将详细介绍二维材料的基本概念,包括它们的分类、结构、性质以及在半导体材料仿真中的应用。

2401_87715305的博客 1545

原来我之前并不懂:Android之Spanned flag

年前的这几天,一直在看代码,发现自己之前对很多技术点的理解都不全面,甚至根本就是想当然。所以有这样一个想法,要把之前理解很粗浅的东西慢慢整理一遍,补一下技术上的短板。 这个过程会比较长,准备把涉及到的不同技术点写一个系列文章,系列名字嘛,就直白点:原来我之前并不懂,是不是很直白O(∩_∩...

chizhi9960的博客 825

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 909

Python之achatbot包语法、参数和实际应用案例

本书是一本PyTorch深度学习实战指南,分为基础(前6章)和进阶(后5章)两大部分。基础部分涵盖张量运算、神经网络、数据预处理及CNN等核心内容;进阶部分则深入图像、文本、音频建模技术,重点解析Transformer架构及大语言模型开发。全书采用"理论+实践"模式,适合从零基础到进阶的PyTorch学习者。

王国平的博客 631

轻松掌握Android富文本:Advanced Android TextView之FromHtml全解析

想要在Android应用中快速实现富文本显示效果吗?今天我们将深入解析Advanced Android TextView项目中的HTML.fromHtml()功能,这是Android开发者实现富文本显示的终极解决方案!无论你是Android开发新手还是想要提升TextView使用技巧的开发者,这篇完整指南将带你从零开始掌握如何在TextView中优雅地显示HTML内容、图片和链接。 ## 🎯

gitblog_00868的博客 888

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 283

TextView效果实例

1 TextView的Html效果 代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView textView = (TextView) findVi

zhangzty111的博客 286

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TextView

TextView还派生了一个CheckedTextView,CheckedTextView增加了一个checked状态,可通过setChecked(boolean)和isChecked()方法来改变、访问该组件的checked状态。//必须设置图片大小,否则不显示。(2)、使用Html.ImageGetter提供网页中要显示的图片。(3)、在TextView内部四周可以各设置一张图片。

6163

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android富文本的学习一

1TextView的富文本介绍: 什么是富文本,大家都知道TextView可以显示文字,设置文字样式,利用富文本可以给TextView添加更多的样式,更加的类似h5网页,例如在一个TextView通常显示的文本样式是统一的,如果想对显示的同一段文本不同部分的文字设置不同的样式,颜色,大小等就需要用到富文本,富文本还可以利用TextView显示图片,设置点击事件等。 TextView想要实现富文本...

lidongxiu0714 3197

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Android】Span富文本简介

android.text包下span体系类,主要指Spanned、Spannable、ParagraphStyle、CharacterStyle实现类。Android通过Span体系,搭建了富文本API,其中Spanned、Spannable实现了CharSequence接口,旨在映射段落start~end之间Span装饰对象。

qq_40900926的博客 956

Android Spanned实现TextView富文本效果(2)--表情

原文:http://www.cnblogs.com/lichenwei/p/4612079.html今天学习富文本后续表情的处理这种实现方式是通过Android官方给我们提供的Html类下面的fromHtml方法,这个方法可以对字符串进行HTML格式化,让TextView等一些控件”认识”HTML。fromHtml有2个重载方法,下面我简单点来说:1、当你需要转换的HTML代码是纯文字,比如超链接,

missingcall 1855

Android中TextView富文本

android中textview利用富文本标签,类似于html标签,如,,等,可以实现富文本效果.先展示效果图: 代码:package com.eg.lyx.shiqu; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Html; import androi

RELY_ON_YOURSELF的博客 1088

Android——TextView 富文本之 ClickableSpan

前言 ClickableSpan可以让我们在点击TextView相应文字时响应点击事件,比如常用的URLSpan,会在点击时打开相应的链接。而为了让TextView能够响应ClickableSpan的点击,我们需要为它设置LinkMovementMethod,但是这个LinkMovementMethod又有着很大的坑,接下来就总结下这些坑和我的解决办法。 LinkMovementMethod的坑 ...

小欣儿的专栏 2370

Android TextView 富文本之 ClickableSpan

前言 ClickableSpan可以让我们在点击TextView相应文字时响应点击事件,比如常用的URLSpan,会在点击时打开相应的链接。而为了让TextView能够响应ClickableSpan的点击,我们需要为它设置LinkMovementMethod,但是这个LinkMovementMethod又有着很大的坑,接下来就总结下这些坑和我的解决办法。 LinkMovementMethod的坑 ...

weixin_34179968的博客 878

Android的富文本

富文本设置 它是用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。分别有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)...

suhuojin的博客 1310

TextView入门总结

这两个差别似乎不是很大,很多属性都是共有的,只不过一个能编辑一个不能。 xml属性: 代码 解释 android:id="@+id/name" 起个名字 android:layout_width="wrap_content" 控件宽度 android:layout_height="wrap_content" 控件高度 android:text="内容" 控件显示的字符内容 android:ems="1" EditText的宽度为一个中文的宽度...

学习使我快乐_玉祥 772

用 Hypothesis 属性化测试覆盖配置参数:以 Argon2 密码哈希库为例

配置参数测试是软件测试中极易被忽视、却又极易出错的一环。本文基于 Hypothesis 项目仓库中的经典实践文章 [testing-configuration-parameters.md](https://link.gitcode.com/i/98b4a6f5c0601c6c599d1731df795607),讲解如何用属性化测试(property-based testing)系统性地遍历大量配置

gitblog_00149的博客 749

Android TextView动态更新原理与实践指南

TextView作为Android UI开发的核心组件,其动态更新机制涉及UI渲染原理与线程安全模型。通过Canvas绘制机制,TextView将CharSequence内容渲染到屏幕,setText()方法触发布局重计算与视图重绘流程。在性能优化层面,开发者需关注主线程安全规则,采用Handler或ViewBinding等现代化方案避免线程冲突。典型应用场景包括实时数据展示、聊天消息渲染等高频更新需求,结合SpannableString可实现富文本样式控制。热词提示:通过post()方法确保线程安全,利用

weixin_34268310的博客 428

Android控件TextView实现静态图与动态GIF图文混排

最近做项目功能时,需要在TextView中展示图文,刚开始做的时候以为很简单,只需要用个ImageView跟TextView来展示就行了,可是发现这样做,不能实现我们需要的效果,这就需要涉及到富文本TextView来展示图文,下面介绍静态图片的图文和动态GIF的图文两种展示方式: 静态图片的图文: 效果如下: 代码: String content = &quot;“我最糟糕的...

龙旋的博客 1957
上一篇: Android中获取颜色的几种方法
下一篇: Android Spanned实现TextView富文本效果(2)--表情
missingcall
博客等级 码龄10年 8粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值