3

我想知道是否有任何简单的方法可以使用android中的复数资源机制来格式化基于负数、零和正数的整数?

我想要的答案是

  • 如果 getRemaining() < -1 则 "|getRemaining()| 几天前"
  • 如果 getRemaining() == -1 则 "|getRemaining()| 一天前"
  • 如果 getRemaining() == 0 那么“getRemaining() 剩余天数”
  • 如果 getRemaining() == 1 那么“getRemaining() 剩余天数”
  • 如果 getRemaining() > 1 那么“getRemaining() 剩余天数”

现在我通过以下代码实现了这一点

if (item.getRemaining() > -1) {
        holder.remainingTV.setText(res.getQuantityString(R.plurals.plural_remaining, item.getRemaining(),
            item.getRemaining()));
} else {
        holder.remainingTV.setText(res.getQuantityString(R.plurals.plural_ago, -item.getRemaining(), -item.getRemaining()));
}

我的资源看起来像这样

<plurals name="plural_remaining">
    <item quantity="one">%d Day Remaining</item>
    <item quantity="other">%d Days Remaining</item>
</plurals>

<plurals name="plural_ago">
    <item quantity="one">%d Day Ago</item>
    <item quantity="other">%d Days Ago</item>
</plurals>

我怎样才能实现上述解决方案,而不必根据 android 中的 -ve 和 +ve 数字来拆分它们?

4

1 回答 1

0

您可以像这样(在 Kotlin 中)或 Math.abs(在 Java 中)使用数量的绝对值到 getQuantityString 中:

getQuantityString(
   R.plurals.a_plural,
   quantityValue.absoluteValue,
   quantityValue
)

它将处理:-1、0、1 和其他值

于 2019-07-19T20:58:21.060 回答