字符串资源

摘抄自Android Train

格式和样式设置

关于如何正确设置字符串资源的格式和样式,您应该了解下面这几个要点。

转义撇号和引号

如果字符串中包含撇号 ('),您必须用反斜杠 (') 将其转义,或为字符串加上双引号 ("")。 例如,以下是一些有效和无效的字符串:

<string name="good_example">This\'ll work</string>
<string name="good_example_2">"This'll also work"</string>
<string name="bad_example">This doesn't work</string>

如果字符串中包含双引号,您必须将其转义(使用 ")。 为字符串加上单引号不起作用。

<string name="good_example">This is a \"good string\".</string>
<string name="bad_example">This is a "bad string".</string>
    <!-- Quotes are stripped; displays as: This is a bad string. -->
<string name="bad_example_2">'This is another "bad string".'</string>
    <!-- Causes a compile error -->

设置字符串格式

如果您需要使用 String.format(String, Object...)设置字符串格式,可以通过在字符串资源中加入格式参数来实现。 例如,对于以下资源:

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

在本例中,格式字符串有两个参数:%1$s 是一个字符串,而 %2$d 是一个十进制数字。 您可以像下面这样使用应用中的参数设置字符串格式:

Resources res = getResources();  
String text = String.format(res.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> 表示粗体文本。
  • <i> 表示斜体文本。
  • <u> 表示<u>下划线</u>文本。

有时,您可能想让自己创建的带样式文本资源同时也用作格式字符串。 正常情况下,这是行不通的,因为 String.format(String, 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 转义。

  1. 然后照常设置字符串格式,但还要调用 fromHtml(String) 以将 HTML 文本转换成带样式文本:
Resources res = getResources();  
String text =  String.format(res.getString(R.string.welcome_messages), username, mailCount);  
CharSequence styledText =  Html.fromHtml(text);

由于 fromHtml(String) 方法将设置所有 HTML 实体的格式,因此务必要使用 htmlEncode(String) 对您用于带格式文本的字符串中任何可能的 HTML 字符进行转义。 例如,如果您向 String.format() 传递的字符串参数可能包含“<”或“&”之类的字符,则必须在设置格式前进行转义,这样在通过 fromHtml(String) 传递带格式字符串时,字符就能以原始形式显示出来。 例如:

String escapedUsername =  TextUtil.htmlEncode(username);
Resources res = getResources();  
String text =  String.format(res.getString(R.string.welcome_messages), escapedUsername , mailCount);  
CharSequence styledText =  Html.fromHtml(text);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://developer.android.youdaxue.com/guide/topics/resour...
    acc8226阅读 3,947评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • 上面的效果图其实包含了两种菜单。首先,右上角的那个加号和竖着的三点,是Options菜单。再者,在屏幕正中的这个是...
    uncle_charlie阅读 5,205评论 0 0
  • 偶尔的依赖 只是借口 只是伤痛的安慰 视线被拉到远处火车的那边 突然意识到这仿佛是罪过 嬉戏的声音只会勾勒出忧伤 ...
    无我清风徐来阅读 1,014评论 0 0
  • 今天下午我的朋友问我类目与延展的区别,恩,寻思了一会和他简单的说了几句,接下来结合资料说一说作用于区别吧 类目和延...
    JonesCxy阅读 4,170评论 0 0