为了顺应当前形势和更好的发展,黑基网已于9月19日正式更名为【安基网】,域名更换为www.safebase.cn,请卸载旧的APP并安装新的APP,给您带来不便,敬请理解!谢谢

黑基Web安全攻防班
安基网 首页 IT技术 编程开发 查看内容

Android 动态处理文本的两种方式

2017-10-30 14:09| 投稿: lofor |来自: 互联网

摘要: 实现的效果就像这样,不知道是不是叫做动态处理文本。效果就是这么个效果,实现就是这么去实现,看下文分析。使用场景需要高亮文本中的某些内容,以突出重要的数据或者诱导用户去点击该内容。实现方式可以通过Html.f ...

实现的效果就像这样,不知道是不是叫做动态处理文本。效果就是这么个效果,实现就是这么去实现,看下文分析。

使用场景

需要高亮文本中的某些内容,以突出重要的数据或者诱导用户去点击该内容。实现方式可以通过 Html.fromHtml() 方式和 SpannableStringBuilder ( 或者 SpannableString )去实现。

Tip : SpannableStringBuilder 和 SpannableString 的区别是

  • SpannableString 无法更改 String 的内容,也无法拼接多个 SpannableString ;
  • SpannableStringBuilder 则可以通过其 append() 方法来拼接多个 String ,这里只介绍了 SpannableStringBuilder 的实现方式。

Html.fromHtml( ) 方式

Android 目前不支持全部的 HTML 的标签,目前只支持与 文本显示 和 段落 等标签,对于 图片 和其他的 多媒体 ,还有一些自定义标签不能识别;

  • 实现效果

  • 使用方式

首先需要拿到你要高亮的字符串,通过html标签去设置,下面的代码用到了 font标签 和 strong标签 。

然后通过Html.from(string) 方法去解析该字符串即可实现效果。

String str2 = "我要<font color='#FF4081'>打赏</font>这个内容,<strong><font color='#FF4081'>作者太TM帅</font></strong>了balabala,谁也不许拦我,除非她给我发红包,或者点个Star";
 mTvTestHtmlText.setText(Html.fromHtml(str2));

SpannableStringBuilder 方式

Android 目前不支持全部的 HTML 的标签,目前只支持与 文本显示 和 段落 等标签,对于 图片 和其他的 多媒体 ,还有一些自定义标签不能识别;

  • 使用方式

主要是通过 setSpan() 方法去实现,由于该方法能够同时使用多个,因此同一个字符串的长度内的内容可以有多种显示效果,

例如:效果图中的 打赏 二字,添加了下划线的同时字体的颜色页变成偏蓝色,而且还添加了 点击效果哦

组合使用实现的效果: 代码中有注释,挺好理解的 需要注意的是 setSpan 方法的最后一个参数,这个参数的含义是:控制第二和第三个参数的生效范围。它有四个可选值,分别是

  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE (前后都不包括,前指的是第二个参数,后指的是第三个参数)
  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE (前面包括,后面不包括)
  • Spanned.SPAN_EXCLUSIVE_INCLUSIVE (前面不包括,后面包括)
  • Spanned.SPAN_INCLUSIVE_INCLUSIVE (前后都包括)
String str2 = "我要<font color='#FF4081'>打赏</font>这个内容,<strong><font color='#FF4081'>作者太TM帅</font></strong>了balabala,谁也不许拦我,除非她给我发红包,或者点个Star";

SpannableStringBuilder builder = new SpannableStringBuilder(str1);
// "我要"字体颜色变为粉色,Spanned.SPAN_EXCLUSIVE_INCLUSIVE 表示起始和终止的模式为:包左不包右
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#FF4081")), 0, 2, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置背景色
builder.setSpan(new BackgroundColorSpan(Color.parseColor("#009ad6")), 4, 6, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置字体大小(绝对值,单位:像素) 
builder.setSpan(new AbsoluteSizeSpan(80), 12, 14, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置粗体和斜体
builder.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 15, 23, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置删除线
builder.setSpan(new StrikethroughSpan(), 23, 29, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置下划线
builder.setSpan(new UnderlineSpan(), 29, 35, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置图片
builder.setSpan(new ImageSpan(this, R.mipmap.ic_launcher), 35, 38, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
// 设置点击
builder.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Toast.makeText(MainActivity.this, "点击了打赏", Toast.LENGTH_SHORT).show();
    }
}, 2, 4, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

mTvTestSpannerText.setText(builder);
// 设置点击
mTvTestSpannerText.setMovementMethod(LinkMovementMethod.getInstance());

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部