LargeValueFormatter выглядит неправильно для локали Английский (Австралия) - PullRequest
0 голосов
/ 21 сентября 2018

Я использую LargeValueFormatter для форматирования значений оси Y.Он отлично работает для всех языков, кроме английского (Австралия).например, он возвращает значения, такие как 4K, 8K, 16K и т. д., для всех других локалей, но когда я меняю локаль на английский (Австралия), он возвращает те же значения, что и 4e03, 8e03, 16e3 ....

Howя могу это исправить?Я сомневаюсь в экземпляре DecimalFormat, так как он использует локаль для внутреннего использования.

Устройство: [Эмулятор, Samsung S7, Moto Z] Версия Android [8, 9] Версия библиотеки (v 3.0.3)

1 Ответ

0 голосов
/ 28 сентября 2018

Да из-за проблем с локалью.«E» становится строчным, тогда регулярное выражение больше не работает.

Ожидая официального патча от MPAndroidChart, вы можете временно исправить его, создав собственный LargeValueFormatter, аналогичный исходному коду, но с небольшим изменением в конструкторе:

public LargeValueFormatter() {
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
    mFormat  = (DecimalFormat)nf;
    mFormat.applyPattern("###E00");
}

или изменить makePretty ():

private String makePretty(double number) {

    String r = mFormat.format(number);

    int numericValue1 = Character.getNumericValue(r.charAt(r.length() - 1));
    int numericValue2 = Character.getNumericValue(r.charAt(r.length() - 2));
    int combined = Integer.valueOf(numericValue2 + "" + numericValue1);

    r = r.replaceAll("E|e[0-9][0-9]", SUFFIX[combined / 3]);

    while (r.length() > MAX_LENGTH || r.matches("[0-9]+\\.[a-z]")) {
        r = r.substring(0, r.length() - 2) + r.substring(r.length() - 1);
    }

    return r;
}
...