涛锅锅的Android资料Android技术知识Android自定义控件

Android-TextView设置部分高亮-字符坑

2017-09-01  本文已影响192人  橘子周二
样图.png

背景:通常APP 登陆注册时,下方我们都会放一行提示语: 如果你注册或登录则表示同意 《xx 安全隐私协议》。《xx 安全隐私协议》一般都是高亮的。

正文

一般来说我有N种方式来实现这个效果。
不管是Html,还是自定义TextView,或者是SpannableString都可以。
如果使用了语言国际化不推荐使用SpannableString
不同语言的字符集长度是不一样的。我这里就没用
但以上都只适用与你不引入<>符号

我是用了html 代码来实现效果,但是产品经理要求将《》换成<>
虽然我知道英语没有书名号,不知道是不是泰语有。反正我得先给他换好

进坑

  <string name="customer_service_agreement"> \<Customer service agreement\></string>

看这颜色标注你就知道不通过。
上面格式会报错 属性不合法,那也就是不能直接使用< >这两个符号了


  String agreement =findStringById(R.string.agreement);//无<>符号
  String html  = "<font  color=\"#E40000\">\<"+agreement+"\></font>"
  tv.setText(Html.fromHtml(html));

没用x1
但经我测试,这段代码在Web浏览器中是可以显示出正确结果的。

 <string name="customer_service_agreement"><Customer service agreement <</string>

  String agreement =findStringById(R.string.agreement);//无<>符号
  String html  = "<font  color=\"#E40000\">"+agreement+"</font>"
  tv.setText(Html.fromHtml(html));

运行结果应该是格式化失败了,毛都不显示一个。

没用x2

此时,我的心态!
OK,冷静,冲动是程序员的大忌,后面还有方法可用。
转而我又在xml 中使用了 < >对应的字符实体名称 <>

没用x3 WTF~FFF

java中又试了 字符实体编号
没用x4 WTF~FFF

java中又试了 字符实体名称
没用x? GOD IT'S FUCKING WORK

所以在文本部分高亮时使用特殊字符 < >,正确的打开方式应该是这样的

 String html  = "<font   color=\"#999999\">"+content+"</font> " +
                "<font   color=\"#E40000\"><" + agreement + "></font>"
                ;

我这里只针对< >,如果有其他不可在xml 中直接使用转义字符的,都可以这样使用。
另外提一点,单独在xml使用 实体字符编号(> ->)是不会有问题的,这里只不过是格式化成Html以后错误了。

别问我还有哪些,等你遇到就知道了 哈哈

最后附上 HTML 特殊字符实体名称及编号表:

特殊字符实体名称及编号.png

本文参考HTML 字符实体

上一篇 下一篇

猜你喜欢

热点阅读