美文网首页Android开发Android开发程序员
Android 动态处理文本的两种方式

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

作者: d74f37143a31 | 来源:发表于2017-10-29 10:00 被阅读177次
image.png

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

使用场景

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

Tip: SpannableStringBuilder和SpannableString 的区别是 SpannableString 无法更改 String 的内容,也无法拼接多个SpannableString;

SpannableStringBuilder则可以通过其append()方法来拼接多个String,这里只介绍了SpannableStringBuilder的实现方式。

Html.fromHtml( ) 方式

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

实现效果
image.png
使用方式

首先需要拿到你要高亮的字符串,通过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 方式

主要能实现的效果如下:
修改字体颜色
设置字体背景颜色
设置字体大小
设置粗体斜体
设置删除线
设置下划线
设置图片----将位置为多少多少的地方设置为图片
设置点击事件

使用方式

主要是通过 setSpan()方法去实现,由于该方法能够同时使用多个,因此同一个字符串的长度内的内容可以有多种显示效果,例如:效果图中的打赏二字,添加了下划线的同时字体的颜色页变成偏蓝色,而且还添加了点击效果哦

image.png

组合使用实现的效果:代码中有注释,挺好理解的
需要注意的是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());

项目地址

这是一个我平时遇到的不能一下子实现的功能而做的 Demo 仓库,里面实现的内容很杂,想到什么就去实现什么,所以见谅吧。

地址是: AndroidLeaningDemo 在166~197行左右

相关文章

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

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

  • Android插件化(一) 动态加载技术

    Android支持动态加载的两种方式是:DexClassLoader和PathClassLoader,DexCla...

  • Android长按图标展示快捷方式

    Android API当中给出了两种实现方式,一种是静态,一种是动态。 静态方式: 静态的方式,需要xml资源,以...

  • Android 事件冲突处理

    概述 本文主要分享Android常见的事件冲突处理,处理方式有两种: 外部拦截:父容器处理冲突 内部拦截:子控件处...

  • Android文本切割成多个bitmap

    Android文本切割成多个bitmap,切割之前必须考虑,当字符过多的时候,要处理字符换行,有两种方案: 方案1...

  • Android 面试7——Parcelable

    Android 中对数据的序列化处理,有两种方式: 实现 Serializable 接口,这时 Java SE 中...

  • 第6章 文件操作

    6.1 文件的使用 6.1.1 文件概述 Python 能够以文本和二进制两种方式处理文件。文本文件一般由单一特定...

  • 设置文本样式

    基本文本样式 text-align: 文本对其方式。 whitespace: 指定处理文本空白的方式。 direc...

  • Android权限 AOP集中处理VS即时处理

    前言 Android 6.0版本后,危险权限需要动态申请,就不废话了,本文简单来说就是介绍权限处理的两种方法 AO...

  • Android 电池电量

    Android 中通过广播获取电池电量信息. 电量信息只能通过动态注册广播才能获取到. 1.0 注册广播的两种方式...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/rxnepxtx.html