【问题标题】:How can I use html styles in strings with format arguments?如何在带有格式参数的字符串中使用 html 样式?
【发布时间】:2011-11-17 16:03:22
【问题描述】:

在我的应用程序中,我想在 strings.xml 中定义一个格式字符串,如下所示(注意<b>...</b> 标签):

<string name="location"><b>Location:</b> %1$s</string>

然后使用getString(int, Object...) 替换格式参数:

String formattedString = getString(R.string.location, "Edmonton, AB");

这会产生一个值"Location: Edmonton, AB"。我想获得"&lt;b&gt;Location:&lt;/b&gt; Edmonton, AB" 的值。

有没有办法在 strings.xml 中使用字符串格式而不将其拆分为两个字符串?

【问题讨论】:

    标签: java android


    【解决方案1】:

    来自docs

    有时您可能想要创建一个样式化的文本资源,该资源也是 用作格式字符串。通常,这不起作用,因为 String.format(String, Object...) 方法将剥离所有样式 来自字符串的信息。解决方法是编写 带有转义实体的 HTML 标签,然后用 fromHtml(String),在格式化之后。

    例如:

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

    确保转义您在String.format() 中传递的文本

    String escapedUsername = TextUtils.htmlEncode(username);
    Resources res = getResources();
    String text = String.format(res.getString(R.string.welcome_messages), escapedUsername, mailCount);
    CharSequence styledText = Html.fromHtml(text);
    

    【讨论】:

    • @GregInYEG - 发生在我们最好的人身上。我的荣幸。
    • 请注意 TextUtils.htmlEncode() 方法不会将 ' '(空格)替换为 ' '。这在我的情况下造成了麻烦(我正在使用 mailto: 带有主题和正文参数的超链接)。否则上面的解决方案效果很好。
    【解决方案2】:

    使用字符串格式。例如

      <string name="location"><![CDATA[<b>Location:</b> %s]]></string>
    
    String formattedString = String.Format(getString(R.string.location), "Edmonton, AB");
    

    【讨论】:

    • 示例中的字符串不包含样式。如果是这样,对 getString(R.string.location) 的调用将删除它们。
    • 我认为重点是格式化一个字符串,这就是我的示例所做的。将格式字符作为额外参数添加到格式方法中。
    • String.format(getString(R.string.location), "Edmonton, AB") 返回与 getString(R.string.location, "Edmonton, AB") 相同的内容。也不在 strings.xml 的字符串中保留像 ... 这样的样式。 @iPaulPro 的答案指向 android 文档,该文档解释了如果我想同时使用样式和格式参数,我需要转义样式并使用 Html.fromHtml(...)。
    • 你需要转义你的字符串资源。我已经修改了上面的答案。 (没有意识到 Html 代码是问题的重点)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2021-11-25
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多