Как сделать запятую доступной для редактирования в EditText только один раз?
Я работал над чем-то уже довольно давно, но я просто не могу это сделать. Моя проблема в том, что у меня есть EditText, где я хочу, чтобы пользователь мог вводить десятичное число (например, 3,95 или 3,95). Я поставил inputType для numberDecimal, а также попытался ограничить цифры "0123456789,". но он либо не позволял пользователю вводить запятую, либо позволял пользователю загружать их. Я хочу, чтобы пользователь мог вводить только один разделитель (будь то "." Или ","). Кто-нибудь может мне с этим помочь?
3 ответа
Проверьте формат в реальном времени.
1. replace , => .
2. cast to double
if casting fails, go back to backuped string.
На макете xml:
<EditText
android:id="@+id/editText"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:inputType="numberDecimal"
android:digits="0123456789.,"/>
На яве
final EditText editText = (EditText) findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher() {
String sBackup;
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
double value;
try {
if (editable.toString().equals("") == false) {
value = Double.valueOf(editable.toString().replace(',', '.'));
sBackup = editable.toString();
}
} catch (Exception e) {
editText.setText(sBackup);
editText.setSelection(editText.getText().toString().length());
}
}
});
Сначала получите разделитель на основе локали.
DecimalFormat format = (DecimalFormat)
DecimalFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
defaultSeperator=Character.toString(symbols.getDecimalSeparator());
Затем установите textwatcher для ограничения.
editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable editable) {
if(editable.toString().contains(defaultSeperator))
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
else
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + defaultSeperator));
}
}
Вам нужно установить фильтр ввода на редактирование текста.
public static InputFilter getFilter() {
return new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int index = start; index < end; index++) {
// Filter here
}
return null;
}
};
}
et_Txt.setFilters(new InputFilter[]{getFilter()});
Затем проверьте каждый ввод символов в соответствии с вашим требованием.