我在“ es哥伦比亚”和“ es墨西哥”语言环境中格式化我的货币,有时我需要一种,有时我需要另一种。
问题在于,该格式会根据Android版本返回不同的值。
我通过两种不同的方式获取语言环境:
// Option 1
val locale = Locale("es_CO")
// Option 2
val locale = Locale.getAvailableLocales().firstOrNull {
it.language == "es" && it.displayCountry.compareTo("Colombia", true) == 0
}
然后我将其格式化为:
val formatter = DecimalFormat.getCurrencyInstance(locale).apply {
minimumFractionDigits = 0
maximumFractionDigits = 0
}
// On Android 28
formatter.format(1000000) -> "$ 1.000.000"
// On Android 17
formatter.format(1000000) -> "1.000.000 $"
我还检查formatter.currency
是否正在更改,但两个Android版本都相同。
为什么?
我最终还是手动完成,但仍然感觉这不是正确的解决方案,但是它可以在多个Android版本上使用:
val formatter = NumberFormat.getCurrencyInstance(locale)
(formatter as? DecimalFormat)?.apply {
val cleanPattern = toPattern().replace("¤", "").trim()
applyPattern("¤ $cleanPattern")
}
// Use formatter