リソースで getQuantityString メソッドを使用して、Android開発者ガイドライン Quantity String(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));
1つの回避策は、文字列の最後の部分にのみ複数形を使用するように文字列を分割し、2つの部分を連結することです。しかし、可能であれば、それを避けようとしています。
これらのアイテムのいずれにも「フォーマット済み」属性を設定する必要はありません。数量文字列を使用する場合、3つの可能性のみがあります。
%d
_または必要な形式を使用します%1$d
_など、位置によって明示的にアクセスする必要がありますgetQuantityString
メソッドに関しては、2つのオーバーロードがあります。1つはressource idと数量のみ、もう1つは追加の_Object... formatArgs
_パラメーターです。
ケース1.の場合、getQuantityString(@PluralsRes int id, int quantity)
メソッドを使用できます。
他のすべての場合、i。 e。パラメータがある場合は、getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)
オーバーロードが必要です。注:allパラメーターはparam配列に存在する必要があります。つまり、リソース文字列が数量を表示する場合、数量変数は関数に渡されますtwice。
これらがあなたのリソースなら
_<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
_