Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中具有样式的字符串的字符串资源中的参数_Java_Android_String - Fatal编程技术网

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

Java android中具有样式的字符串的字符串资源中的参数,java,android,string,Java,Android,String,我的strings.xml文件中有一个字符串,例如 <string name="my_text">Hello <b>$%1$s</b>, android is cool <b>bold me</b></string> 你好$%1$s,android对我来说很酷 使用粗体样式检索文本的唯一方法是使用 resources.getText(R.string.my_text) 尽管问题是getText没有为我希望提供的参数获

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

  <string name="my_text">Hello <b>$%1$s</b>, android is cool <b>bold me</b></string>
你好$%1$s,android对我来说很酷
使用粗体样式检索文本的唯一方法是使用
resources.getText(R.string.my_text)

尽管问题是getText没有为我希望提供的参数获取额外的参数,例如获取参数的方法getString,例如
resources.getString(R.string.my_文本,“我将以粗体显示”)


如果我使用getString,我将丢失粗体;如果我使用getText,我无法传递参数,我如何获得这两个参数?

您可以按如下方式实现它

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

strings.xml

你好b>$%1$s/b>,安卓很酷b>粗体me/b>

代码


String.format(res.getString(R.my_text.welcome_messages),“我将以粗体显示”)

您可以创建一个助手方法,该方法接受字符串键和格式类型,然后返回相应的字符串。大概是这样的:

<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");

你好,世界
你好,世界
公共字符串getFormattedString(int键,int类型){
字符串packageName=getPackageName();
字符串资源=键+“\u”+类型;
int resourceId=getResources().getIdentifier(资源,“字符串”,packageName);
返回getString(resourceId);
}
//现在使用helper方法
getFormattedString(“文本”、“粗体”);

要扩展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>

注:答案的作者既不能确认也不能否认在这个答案的创作过程中消耗了一些蛋糕。然而,据你所知,没有真正的超级恶棍参与其中

仅为粗体/非粗体版本创建单独条目会有什么问题?这是否回答了您的问题?您将以这种方式丢失HTML标记,因为
getString()
在内部调用
toString()
,并将逃避任何样式设置。谢谢!这让我很开心!
HtmlCompat.fromHtml(getString(R.string.test, "forty", 40, "four", "tens"), HtmlCompat.FROM_HTML_MODE_COMPACT)