2015-12-19 9 views
1

Я пытаюсь форматировать валюту в своем текстовом редакторе. Я написал код, и у меня проблема. NumberFormat возвращает разные символы валют на разных устройствах.Формат валюты Android, возвращающий другой символ валюты

Вот мой исходный код:

final NumberFormat nf = NumberFormat.getInstance(Locale.US); 
    transfer_maney.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      if (!s.toString().equals(current)) { 
       transfer_maney.removeTextChangedListener(this); 

       String cleanString = s.toString().replaceAll("[$,.]", ""); 


       double parsed = Double.parseDouble(cleanString); 
       String formatted = nf.getCurrencyInstance().format((parsed/100)); 
       current = formatted; 

       if (formatted.contains("$")) { 
        formatted = formatted.replace("$", ""); 
       } 
       transfer_maney.setText(formatted); 
       transfer_maney.setSelection(formatted.length()); 

       transfer_maney.addTextChangedListener(this); 
      } 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

Моя цель состоит в том, чтобы всегда возвращать $ символ, а затем удалить его. Как я уже сказал, на разных устройствах у меня разные символы. На некоторых устройствах я получаю символ $, на некотором £ символе. Что я должен изменить в своем коде, поэтому он всегда будет возвращать символ доллара ($), чтобы я мог его удалить?

Я попытался изменить Locale, но он не работает. Если кто-нибудь знает решение, пожалуйста, помогите мне.

Спасибо всем

ответ

0

Проблема в том, что вы используете статический метод NumberFormat.getCurrencyInstance(), который работает таким образом:

public final static NumberFormat getCurrencyInstance() { 
    return getInstance(Locale.getDefault(Locale.Category.FORMAT), CURRENCYSTYLE); 
} 

Как вы можете видеть, он возвращает NumberFormat объект с не используется по умолчанию Locale, Locale вы устанавливаете. Это означает, что это зависит от настроек пользовательского устройства.


Таким образом, вместо вызова format на том, что статически возвращается экземпляр с невыполнением Locale:

nf.getCurrencyInstance().format(parsed/100); 

которая фактически то же самое, как:

NumberFormat.getCurrencyInstance().format(parsed/100); 

Используйте ваш например, с Locale это у вас есть комплект:

final NumberFormat nf = NumberFormat.getInstance(Locale.US); 
String formatted = nf.format(parsed/100);