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

Jad*_*ada 9 java string android

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

  <string name="my_text">Hello <b>$%1$s</b>, android is cool <b>bold me</b></string>
Run Code Online (Sandbox Code Playgroud)

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

虽然问题是 getText 没有为我希望提供的参数采用额外的参数,例如采用诸如 resources.getString(R.string.my_text, "I WILL BE BOLDED")

如果我使用 getString 我失去了粗体,如果我使用 getText 我不能传递参数我如何获得两者?

Com*_*are 9

要扩展 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>
Run Code Online (Sandbox Code Playgroud)

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

HtmlCompat.fromHtml(getString(R.string.test, "forty", 40, "four", "tens"), HtmlCompat.FROM_HTML_MODE_COMPACT)
Run Code Online (Sandbox Code Playgroud)

注意:答案的作者既不能确认也不能否认在创建此答案时消耗了一定数量的蛋糕。但是,据您所知,并没有涉及真正的超级恶棍。


Yev*_*ian 6

使用Kotlin,您可以创建扩展函数

fun Resources.getText(@StringRes id: Int, vararg formatArgs: Any?): CharSequence =
    getText(id).toSpanned().toHtml().format(*formatArgs).parseAsHtml()
Run Code Online (Sandbox Code Playgroud)

然后是 strings.xml 文件中的字符串,例如

<string name="my_text">Hello <b>$%1$s</b>, android is cool <b>bold me</b> </string>
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式检索

resources.getText(R.string.my_text, "I WILL BE BOLDED")
Run Code Online (Sandbox Code Playgroud)

作为下一个文本

你好,我会大胆,Android 很酷,大胆


Sag*_*gar 0

您可以通过以下方式实现

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

  • 这样你就会丢失 HTML 标签,因为 `getString()` 在内部调用 `toString()` 并且会转义任何样式。 (3认同)