android中带有样式的字符串的字符串资源中的参数

时间:2018-07-20 00:13:44

标签: java android string

我的strings.xml文件中有一个字符串,例如

  <string name="my_text">Hello <b>$%1$s</b>, android is cool <b>bold me</b></string>

检索带有粗体样式的文本的唯一方法是使用 resources.getText(R.string.my_text);

尽管问题是getText不会为我希望提供的参数提供其他参数,例如带有参数的getString方法,例如 resources.getString(R.string.my_text, "I WILL BE BOLDED")

如果我使用getString,我会失去粗体,如果我使用getText,我将无法传递参数,我该如何获取两者?

4 个答案:

答案 0 :(得分:3)

您可以实现以下目标

String myText = resources.getString(R.string.my_text, "I WILL BE BOLDED");
textView.setText(Html.fromHtml(text));

答案 1 :(得分:1)

strings.xml

<string name="my_text">Hello &lt;b>$%1$s &lt;/b>, android is cool &lt;b>bold me &lt;/b></string>

代码

String.format(res.getString(R.my_text.welcome_messages), "I WILL BE BOLDED");

答案 2 :(得分:0)

您可以创建一个使用字符串键和格式设置类型的帮助程序方法,然后返回适当的字符串。像这样:

<resources>
    <string name="text_normal">Hello World</string>
    <string name="text_bold"><b>Hello World</b></string>
</resources>

public String getFormattedString(int key, int type) {
    String packageName = getPackageName();
    String resource = key + "_" + type;
    int resourceId = getResources().getIdentifier(resource, "string", packageName);

    return getString(resourceId);
}

// now use the helper method
getFormattedString("text", "bold");

答案 3 :(得分:0)

要扩展Sagar的答案,请使用CDATA设置字符串资源:

<string name="test"><![CDATA[When no one was looking, Lex Luthor took <b>%s</b> cakes. He took %d cakes. That\'s as many as %s %s. And that\'s terrible.]]></string>

然后,使用getString()检索字符串资源,并使用HtmlCompat处理格式:

HtmlCompat.fromHtml(getString(R.string.test, "forty", 40, "four", "tens"), HtmlCompat.FROM_HTML_MODE_COMPACT)

注意:答案的作者既不能确认也不能否认在创建此答案时消耗了一些蛋糕。但是,据您所知,没有涉及到实际的超级小动物。