我尝试在参考资料中使用getQuantityString 方法根据Android开发人员指南Quantity String (Plurals)
检索数量字符串(Plurals)我得到的错误是
Error:(604) Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
Error:(604) Found tag </item> where </plurals> is expected
当我设置复数时如下
<plurals name="productCount">
<item quantity="one" formatted="true">%1$d of %2$d product</item>
<item quantity="other" formatted="true">%1$d of %2$d products</item>
</plurals>
并尝试按以下方式阅读
productIndexCountText.setText(getResources().getQuantityString(R.plurals.productCount, position, size));
一种解决方法是将字符串分解为仅对字符串的最后部分使用复数并连接这两部分。但是我尽量避免这样做。
答案 0 :(得分:53)
您不需要设置&#34;格式化的&#34;任何这些项目的属性。使用数量字符串时,只有三种可能性:
%d
或您需要的任何格式%1$d
对于getQuantityString
方法,有两个重载:一个只包含资源ID和数量,另一个包含额外的Object... formatArgs
参数。
对于案例1.,您可以使用getQuantityString(@PluralsRes int id, int quantity)
方法。
对于所有其他情况,我。即如果您有任何参数,则需要getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)
重载。注意:所有参数必须存在于param数组中。这意味着,如果资源字符串显示数量,则数量变量将两次传递给函数。
所以如果这些是你的资源
<resources>
<plurals name="test0">
<item quantity="one">Test ok</item>
<item quantity="other">Tests ok</item>
</plurals>
<plurals name="test1">
<item quantity="one">%d test ok</item>
<item quantity="other">%d tests ok</item>
</plurals>
<plurals name="test2">
<item quantity="one">%2$s: %1$d test ok</item>
<item quantity="other">%2$s: %1$d tests ok</item>
</plurals>
<plurals name="test3">
<item quantity="one">%3$s: %1$d test out of %2$d ok</item>
<item quantity="other">%3$s: %1$d tests out of %2$d ok</item>
</plurals>
</resources>
然后对getQuantityString
的适当调用是:
int success = 1;
int total = 10;
String group = "Group name";
getResources().getQuantityString(R.plurals.test0, success)
// Test ok
getResources().getQuantityString(R.plurals.test1, success, success)
// 1 test ok
getResources().getQuantityString(R.plurals.test2, success, success, group)
// Group name: 1 test ok
getResources().getQuantityString(R.plurals.test3, success, success, total, group)
// Group name: 1 test out of 10 ok
success = 5;
getResources().getQuantityString(R.plurals.test0, success)
// Tests ok
getResources().getQuantityString(R.plurals.test1, success, success)
// 5 tests ok
getResources().getQuantityString(R.plurals.test2, success, success, group)
// Group name: 5 tests ok
getResources().getQuantityString(R.plurals.test3, success, success, total, group)
// Group name: 5 tests out of 10 ok