我在资源中有android app和这个字符串:
<string name="create_group_select_people">Select up to %1$d people!</string>
这是从片段中调用的:
Integer countMax = 5; //also tried just "int" - nothing changed
getResources().getString(R.string.create_group_select_people, countMax);
但我收到了错误:
Format string 'create_group_select_people' is not a valid format string so it should not be passed to String.format
我无法理解错误是什么?当我启动应用程序时 - 它按字面意思显示&#34;选择最多%1美元的人!&#34;
答案 0 :(得分:23)
我刚刚复制了代码,效果很好。 所以你可能需要检查其他地方,这是我的建议。
答案 1 :(得分:9)
将资源中的参数格式设置为true:
<string name="some_text" formatted="true">
Use for String.format method. Parameter one: %s1
</string>
并使用这种方式:
String.format(context.getString(R.string.some_text,"value 1"))
或这种方式:
context.getString(R.string.some_text,"value 1"))
注意:只有带占位符的字符串才应将formatted标志设置为true
答案 2 :(得分:6)
如果您在多个字符串文件(翻译)中使用相同的字符串,则会显示此错误,但是其中一个没有正确的格式,例如缺少“%s”或“%1 $ s”,将使用在下面的行中放置通过的参数(例如:“ countMax”)。
getResources().getString(R.string.create_group_select_people, countMax)
因此,在尝试上述任何其他答案之前,请先进行检查。
答案 3 :(得分:4)
为了其他人可能找到此线程,此警告的一个可能原因是,您在字符串资源文件中定义了多种语言,并且未在其中的一种或多种中指定格式参数。
例如,如果在values文件夹中有一个strings.xml,在values-es文件夹中有另一个strings.xml,但是您仅在values文件夹中将format参数添加到strings.xml,则警告将由于values-es文件夹中strings.xml的字符串资源中缺少格式参数而被触发。
答案 4 :(得分:3)
尝试=CallSkype()
,它为我解决了这个问题。
答案 5 :(得分:1)
尝试执行“清理项目”,然后关闭并重新打开Android Studio。
为我修复了该问题,它看起来像一些Android Studio / Lint的小错误。
答案 6 :(得分:0)
您可能缺少String类的格式方法,如果您在TextView中设置它,正确的方法是:
textView.setText(String.format(getResources().getString(R.string.create_group_select_people), countMax));
答案 7 :(得分:0)
您需要字符串格式化程序。请从
更改以下代码 getResources().getString(R.string.create_group_select_people, countMax);
到
String temp = String.format(getResources().getString(R.string.create_group_select_people), countMax);
有关详细信息refer
答案 8 :(得分:0)
制作一个函数,并将代码放入其中,并在函数之前添加此@SuppressLint("StringFormatInvalid")
。希望对您有所帮助。
答案 9 :(得分:0)
为使字符串的格式正确:
String.format(Locale.ENGLISH, itemView.context.getString(R.string.XXX), "%17")
此外,特殊字符也不必干扰参数的注入。为此,请考虑exhaust outlets中的特殊字符
发件人:<string name="XXX">% %1$s</string>
致:<string name="XXX">%1$s</string>
最后XXX是“%17”
祝你好运。
答案 10 :(得分:0)
在我的情况下,通过重新启动使缓存无效并没有帮助,但是在其他语言环境中使用一致的格式设置参数(例如%s
)解决了该问题。我希望这对以后的人会有所帮助。
答案 11 :(得分:0)
我遇到了同样的问题,但是起源不同。我的应用程序有几种语言,在一种翻译中,没有“%”而是“ $”符号。仍然有效,除了使用这种特定语言外,我在使用字符串的相应行中收到了此提示。
答案 12 :(得分:0)
如果它显示红色错误,那么像这样添加字符串值就可以了。
如果你想要字符串格式:
<string name="msg_token_fmt" formatted="true"> %s
</string>
如果你想要浮动格式浮动:
<string name="msg_token_fmt" formatted="true"> %f
</string>
如果你想要数字格式:
<string name="msg_token_fmt" formatted="true"> %d
</string>