Вот обходной путь, который я использую для решения этой проблемы без переключения на MessageFormat.
Сначала я извлекаю "нулевую" строку в свой собственный строковый ресурс.
<string name="x_items_zero">No items.</string>
<plurals name="x_items">
<!-- NOTE: This "zero" value is never accessed but is kept here to show the intended usage of the "zero" string -->
<item quantity="zero">@string/x_items_zero</item>
<item quantity="one">One item.</item>
<item quantity="other">%d items.</item>
</plurals>
Тогда у меня есть несколько удобных методов в моем собственном ResourcesUtil
public static String getQuantityStringZero(Resources resources, int resId, int zeroResId, int quantity) {
if (quantity == 0) {
return resources.getString(zeroResId);
} else {
return resources.getQuantityString(resId, quantity, quantity);
}
}
public static String getQuantityStringZero(Resources resources, int resId, int zeroResId, int quantity, Object... formatArgs) {
if (quantity == 0) {
return resources.getString(zeroResId);
} else {
return resources.getQuantityString(resId, quantity, formatArgs);
}
}
Теперь каждый раз, когда я хочу использовать определенную строку для нулевого количества, я звоню:
String pluralString = ResourcesUtil.getQuantityStringZero(
getContext().getResources(),
R.plural.x_items,
R.string.x_items_zero,
quantity
);
Хотелось бы, чтобы было что-то лучше, но это, по крайней мере, делает работу, сохраняя разборчивость XML строкового ресурса.