Android中TextView实现分段显示不同颜色的字符串

关于TextView

TextView是Android开发中最最常见的控件之一,在API记录的属性有很多,但实际开发中,也遇到很多有趣的需求,值得去尝试,所以记录下来,既可以给大家提供参考,同时自己需要时候也方便查找.

最近开发过程中有个小小的知识点,就是TextView显示的内容需要分段显示不同的颜色,如下图所示

一般有三种实现方式

  • 直接根据不同的需要分段字符串,然后分别使用多个TextView来显示
  • 使用spannablestring
  • 使用Html

下面分别来简单介绍下三种方法

多个TextVew

  • 这种方式简单粗暴,颜色样式控制灵活
  • 如果需要显示的文本需要分多个段的话,那就需要很多个TextView,而且布局不好控制
  • 实现方式简单,就不写例子了

使用SpannableString

想必用过的人都知道,比较好的一点是SpannableString可以精确控制一个长长的字符串中第几个到第几个字符的样式

SpannableString spannableString = new SpannableString("jakjfkajfjaj");
//设置颜色
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FE6026")), 3, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体大小,true表示前面的字体大小20单位为dip
spannableString.setSpan(new AbsoluteSizeSpan(20, true), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置链接
spannableString.setSpan(new URLSpan("www.baidu.com"), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体,BOLD为粗体
spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

以上只是列举了几个常见的用法,更多的可以参考android.text.style包下面的几个类

不知道大家看出上面的SpannableString的局限了没有,没错,SpannableString的优点在于控制得精细,缺点也是在这。我们使用SpannableString的时候必须指定样式使用的字符下标,那如果我们的字符串不是固定长度的呢?

使用Html

如果使用场景是字符串长度不固定的,比如需要服务端的数据来填充的

"首付:" + data1 + "月供:" + data2

服务端返回的数据长度不固定的话,用SpannableString就尴尬了,这时候可以考虑用Html

Html使用格式比较简单,需要用到font标签,具体的话看下面的例子

//首先是拼接字符串
String content = "<font color=\"#FE6026\">" + data + "</font>"
//然后直接setText()
TextView tvContent = (TextView) view.findViewById(R.id.tvContent);
tvContent.setText(Html.fromHtml(content));

以上就是TextView分段显示不同样式字符串的方法,希望对大家有用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android中TextView局部变色功能实现

    在做项目的时候,遇到过一行文字有两种颜色.在菜鸟的时候直接会想到用多个TextView来实现.后来自己学的多了就找到了更为简单的方法了. 直接上代码: 方法一: xml代码片段: <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> Java代码片段: TextView tv=

  • Android实现可点击展开的TextView

    概述 Android开发过程中,经常遇到 Textview 展示不完全的情况. 遇到此情况,通常的处理是: 方案一 Textview 添加 android:ellipsize 属性,让展示不完的部分使用省略号代替. 方案二 Textview 采用走马灯效果,使其滚动展示全部文本内容. 对于方案一,如果想查看被省略后的内容,如何实现?通常情况下是在 TextView 文本后面或下边添加一个可点击的图标,来实现 TextView 的展开与收缩.如下图: 收缩状态 展开状态 实现原理 对于以上效果,大

  • Android中TextView实现部分文字可点击跳转

    本文实例为大家分享了TextView部分文字可点击跳转的具体代码,供大家参考,具体内容如下 效果图: 需求:每个item的文字都有两部分是连接可点击 当然需要用到SpannableString和ClickableSpan. import android.text.TextPaint; import android.text.style.ClickableSpan; import android.view.View; import com.xuehu365.xuehu.App; import co

  • android使用Textview实现伸缩效果

    android开发过程中,经常遇到Textview展示不完全的情况. 遇到此情况,通常的处理是: 方案一.Textview添加android:ellipsize属性,让展示不完的部分使用省略号代替. 方案二.Textview采用走马灯效果,使其滚动展示全部文本内容. 对于方案一,如果想查看被省略后的内容,如何实现?微信的评论列表,豌豆荚视频详情介绍都有类似使用场景. 下面来看下Demo例子的收起效果,文本内容没有展示完全,使用省略号代替,提示"更多"和向下箭头标识,截图如下: 当点击&

  • Android开发自定义TextView省略号样式的方法

    本文实例讲述了Android开发自定义TextView省略号样式的方法.分享给大家供大家参考,具体如下: 在布局xml中设置textView的字段 android:maxLines="2"  android:ellipsize="end"字段之后,textview会自动压缩行数,并且对压缩掉的部分用...显示.如果不想用...而想用...或者... ...就需要自定义这个省略号的样式,不需要自定义控件,方法如下. 首先是布局文件 <TextView andro

  • Android中TextView实现超过固定行数显示“...展开全部”

    前言 大家都知道,如果要让TextView只显示一行,多出部分用省略号代替的话非常容易,只需要为xml文件中的TextView控件添加android:singleLine="true"即可,那么如果我想让它显示多行的时候应该怎么做呢? 废话不多说,先看效果图: 展开前: 展开后: 示例代码: 工具类: /** * 设置textView结尾...后面显示的文字和颜色 * @param context 上下文 * @param textView textview * @param minL

  • Android自定义可点击的ImageSpan并在TextView中内置View

    有的时候可能想在TextView中添加一些图片,比如下图,发短信输入联系人时,要把联系人号码换成一个图片,但这个图片无法用固定的某张图,而是根据内容进行定制的,这更像一个view. 当然,如果你不是view而是固定的图片,比如发信息时用表情图片替代特殊符号,那么实现起来会更加简单.又或许,你希望这个图片是可点击的.这里,笔者要介绍的就是怎么用一个自定义的ImageSpan来实现在文本里插入可点击的图片或View. 在此之前,如果你还不了解SpannableString.setSpan(),不了解

  • Android实现可以展开的TextView

    本文实例为大家分享了一个可以展开的TextView的具体代码,供大家参考,具体内容如下 原理是通过点击的时候设置 setMaxLines(lineNum)来实现: public class ExpandableTextView extends TextView { private static int MIN_LINE_NUM = 2; private static int MAX_LINE_NUM = 20; private int lineNum = MIN_LINE_NUM; privat

  • Android TextView实现词组高亮的示例代码

    本文介绍了Android TextView实现词组高亮的示例代码,分享给大家,具体如下: HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 效果如下: 主要逻辑: 两个 Paint 负责绘制不同的文字 在每次绘制之前计算将要绘制的文本是否会超出屏幕宽度,如果超出则换行 protected void onDraw(Canvas canvas) { super.onDraw(canvas); float x_d

  • Android中实现词组高亮TextView方法示例

    前言 本文主要给大家介绍了关于Android实现词组高亮TextView的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 主要逻辑: 两个 Paint 负责绘制不同的文字 在每次绘制之前计算将要绘制的文本是否会超出屏幕宽度,如果超出则换行 protected void onDraw(Canvas canvas) { super.o

  • Android Textview实现颜色渐变滚动效果

    本文实例为大家分享了Android颜色渐变滚动展示的具体代码,供大家参考,具体内容如下 public class FlashTextView extends android.support.v7.widget.AppCompatTextView { private Paint mPaint; private int mViewWidth; private LinearGradient mLinearGradient; private Matrix mGradientMatrix; private

随机推荐