Android中输出HTML格式下的文字

在Android中,我们经常会用到TextView这个控件,在使用的过程中,我们用到最多的方法就是setText(),单纯的使用基本上能够满足我们日常的需求,但是有时候我们需要对文字进行一些处理,比如说加粗、斜体、下划线等等,这些也都是可以通过Android提供的原生方法完成。但是如果我们需要实现下面的效果呢:

Android中输出HTML格式下的文字_第1张图片 图1

HTML下的文字解析(快速版)

从图片上我们可以看到,这段文字分别有两种大小,三种颜色。我们当然可以定义多个TextView来实现这样的效果,但是如果我们的文字变化较多,那么定义多个TextView也非常的麻烦。那么接下来我们就来介绍一个比较简单的方法:

String str = "恭喜您!您的手机跑分为888888分,已经超过全国99%的Android手机。";tv.setText(Html.fromHtml(str));

上面的代码中,我们用到了一个方法Html.fromHtml(),这个方法是Android中专门用来解析HTML格式的一个方法,我们可以将任意的HTML格式下的代码通过此方法解析,最后得到我们需要的结果。
通过上面的方法,我们就可以实现在setText()中使用各种带HTML效果的文字了。这样应该能够实现我们开发中98%的需求了,那么还有1-2%的需求是什么呢?

HTML下的文字解析(多语言支持)

比如说我们现在的APP需要兼容多种语言,包括中文、法语、英语、日语等等。在平时的开发过程中,我们都知道多语言的实现可以通过不同values文件夹下的string.xml文件来实现。我们这里就以中文来举例,看看我们如何在string.xml文件中定义HTML格式的文字。
首先我们来尝试将我们上面定义的str中的字符串直接放到string.xml中。

      恭喜您!您的手机跑分为888888分      ,已经超过全国99%的Android手机。   
tv.setText(Html.fromHtml(getString(R.string.test_string)));

运行程序,结果如下:

Android中输出HTML格式下的文字_第2张图片 图2

并没有出现我们预期的效果,HTML格式并没有被解析出来。这是什么原因呢?原因就在于我们使用的getString()方法,官方对于这个方法的解释如下:

Return the string value associated with a particular resource ID. It will be stripped of any styled text information.
返回与特定资源ID相关联的字符串值,它将删除任何样式的文本信息。

那么也就是说我们的HTML格式被getString()方法给删除了,所以我们的文字才会变成普通的字符串。要解决这个问题,我们需要将我们的string.xml中的字符串使用包裹起来,被CDATA包裹起来的字符都会被解析器忽略,也就是说CDATA中的HTML格式将会被原封不动的保留下来,最终交给我们的Html.fromHtml()进行解析。那么我们来尝试以下,将我们string.xml中的字符串改为如下:

        888888分            ,已经超过全国99%的Android手机。        ]]>    

编译运行,结果编译时报错:

Error:(17, 5) Apostrophe not preceded by \ (in  鎭枩鎮紒鎮ㄧ殑鎵嬫満璺戝垎涓?888888鍒?

报错的关键词为:

Apostrophe not preceded by
撇号前面没有\

通过上面的这个报错信息我们可以知道,这是因为'没有进行转义,那么我根据报错信息将所有的单引号进行转义。最后的结果如下:

       888888分           ,已经超过全国99%的Android手机。       ]]>   

最后我们再次运行,得到的就是和我们文章开头一样的结果。
关于Android中HTML格式下的文字解析大概就是这样了,如果大家还有其他的方法,欢迎交流。

后记

最后附上一个在尝试过程中遇到的错误,本来想情景重现的,结果怎么样都无法再遇到那个错误了。如果有遇到这个错误的朋友,可以尝试下面的解决办法。
错误:

Multiple annotations found at this line:

  • error: Multiple substitutions specified in non-positional format; did you mean to add
    the formatted="false" attribute?
  • error: Unexpected end tag string

导致错误的可能原因及解决方法:

  1. string.xml中的字符串中有%,对%进行转义,即改为\%;或者使用两个百分号表示一个,即改为%%
  2. string.xml中的字符串被格式化了,导致解析器解析出错,解决办法为,将formatted设置为false即可。

更多相关文章

  1. Android root检测方法小结
  2. android之计时器(Chronometer)的使用以及常用的方法
  3. win7与android设备通过蓝牙串口的连接方法
  4. 分享一种最简单的Android打渠道包的方法
  5. Android下Activity结束(finish())之后没有释放内存问题的解决方法
  6. Android工程:引用另一个Android工程的方法详解
  7. android中px,dp,sp的区别与使用方法
  8. Android核心分析 之一--------分析方法论探讨之设计意图

随机推荐

  1. Android(安卓)将View 转化为bitmap 图片
  2. (android)system ui 内存优化
  3. 在android style.xml文件中使用自定义属
  4. 使用Android studio个人总结
  5. Hello! RenderScript
  6. android客户端首次进入轮播引导图(五)
  7. mtk android meta连接
  8. 疯狂Android讲义第三版完整带目录
  9. Android串口编程 8.1 Rk3288
  10. android 6.0 logcat机制(三)logd处理请求lo