Android中处理特殊字符

处理特殊字符

如果 XML 或 Android 中的字符串包含有特殊用法的字符,则必须转义这些字符。您可以使用前导反斜杠转义某些字符,但其他字符需使用 XML 转义。您也可以通过在双引号中包括整个字符串,处理撇号和单引号。以下为部分示例:

字符转义形式
@\@
?\?
<&lt;
&&amp;
单引号 (')

以下任意字符:

  • &apos;
  • \'
  • 在双引号中包括整个字符串(例如,"This'll work")
双引号 (")

以下任意字符:

  • &quot;
  • \"

请注意,您必须转义双引号。在单引号中包括字符串没有任何作用。

设置字符串格式

如需设置字符串的格式,您可以在字符串资源中放入格式参数(如以下示例资源所示)。

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

在本例中,格式字符串有两个参数:%1$s 为字符串,而 %2$d 为十进制数字。然后,您可通过调用 getString(int, Object...) 来设置字符串格式。例如:

String text = getString(R.string.welcome_messages, username, mailCount);

使用 HTML 标记设置样式

您可以使用 HTML 标记为字符串添加样式设置。例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="welcome">Welcome to <b>Android</b>!</string>
</resources>

支持以下 HTML 元素:

  • 粗体:<b>、<em>
  • 斜体:<i>、<cite>、<dfn>
  • 文本放大 25%:<big>
  • 文本缩小 20%:<small>
  • 设置字体属性:<font face=”font_family“ color=”hex_color”>。可能的字体系列示例包括 monospaceserif 和 sans_serif
  • 设置等宽字体系列:<tt>
  • 删除线:<s>、<strike>、<del>
  • 下划线:<u>
  • 上标:<sup>
  • 下标:<sub>
  • 列表标记:<ul>、<li>
  • 换行符:<br>
  • 区隔标记:<div>
  • CSS 样式:<span style=”color|background_color|text-decoration”>
  • 段落:<p dir=”rtl | ltr” style=”…”>

如果您没有应用格式设置,则可通过调用 setText(java.lang.CharSequence) 直接设置 TextView 文本。但在某些情况下,您可能想创建带样式的文本资源,并将其用作格式字符串。您通常无法实现此目标,因为 format(String, Object...) 和 getString(int, Object...) 方法会删除字符串中的所有样式信息。解决方法是编写带转义实体的 HTML 标记,并在完成格式设置后通过 fromHtml(String) 恢复这些实体。例如:

  1. 将您带样式的文本资源存储为 HTML 转义字符串:
    <resources>
      <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
    </resources>

    如上所示,带格式的字符串中添加了 <b> 元素。请注意,开括号使用 &lt; 符号实现了 HTML 转义。

  2. 然后照常设置字符串格式,但还需调用 fromHtml(String),以将 HTML 文本转换成带样式的文本:
    String text = getString(R.string.welcome_messages, username, mailCount); 
    Spanned styledText = Html.fromHtml(text, FROM_HTML_MODE_LEGACY);
  3. 由于 fromHtml(String) 方法会设置所有 HTML 实体的格式,因此请务必使用 htmlEncode(String) 转义带格式文本的字符串中任何可能存在的 HTML 字符。例如,如果您打算对包含“<”或“&”等字符的字符串进行格式设置,则在设置格式前必须先转义这类字符。如此一来,当通过 fromHtml(String) 传递带格式的字符串时,字符才会以最初的编写形式显示。例如:
​
String escapedUsername = TextUtils.htmlEncode(username); 
String text = getString(R.string.welcome_messages, escapedUsername, mailCount);
Spanned styledText = Html.fromHtml(text);

​

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值