Лучший способ форматирования ввода валюты editText?
у меня есть editText, начальное значение $0.00. Когда вы нажимаете 1, он изменяется на $ 0.01. Нажмите 4, он идет к $0.14. Нажмите 8, $1.48. Нажмите клавишу Backspace, $0.14 и т. д.
это работает, проблема в том, что если кто-то вручную позиционирует курсор, возникают проблемы с форматированием. Если они должны были удалить десятичную дробь, она не вернется. Если они поместят курсор перед десятичной дробью и типом 2, он отобразит $02.00 вместо $2.00. Если они попытаются удалить$, он удалит цифру вместо этого, например.
вот код, который я использую, я бы признателен за любые предложения.
mEditPrice.setRawInputType(Configuration.KEYBOARD_12KEY);
public void priceClick(View view) {
mEditPrice.addTextChangedListener(new TextWatcher(){
DecimalFormat dec = new DecimalFormat("0.00");
@Override
public void afterTextChanged(Editable arg0) {
}
@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().matches("^$(d{1,3}(,d{3})*|(d+))(.d{2})?$"))
{
String userInput= ""+s.toString().replaceAll("[^d]", "");
if (userInput.length() > 0) {
Float in=Float.parseFloat(userInput);
float percen = in/100;
mEditPrice.setText("$"+dec.format(percen));
mEditPrice.setSelection(mEditPrice.getText().length());
}
}
}
});
Comments