Страницы

Поиск по вопросам

вторник, 18 декабря 2018 г.

Как в EditText отделить разряды?

EditText используется для вывода больших чисел. Как сделать отделение каждых трех разрядов числа пробелом? Например 9 999 999


Ответ

Можно сделать это с помощью TextWatcher
Например, для форматирования номера телефона можно использовать готовый класс PhoneNumberFormattingTextWatcher, реализующий интерфейс TextWatcher
EditText inputField = (EditText) findViewById(R.id.inputfield); inputField.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
В итоге вводимый текст +375298076740 будет выглядеть как
+375 29 807-67-40
Если же Вам нужно выводить текст группами именно по три символа, можете воспользоваться следующим классом:
public class OwnWatcher implements TextWatcher {
// Change this to what you want... ' ', '-' etc.. private static final char space = ' ';
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override public void afterTextChanged(Editable s) { // Remove spacing char if (s.length() > 0 && (s.length() % 4) == 0) { final char c = s.charAt(s.length() - 1); if (space == c) { s.delete(s.length() - 1, s.length()); } } // Insert char where needed. if (s.length() > 0 && (s.length() % 4) == 0) { char c = s.charAt(s.length() - 1); // Only if its a digit where there should be a space we insert a space if (Character.isDigit(c) && TextUtils.split(s.toString(), String.valueOf(space)).length <= 3) { s.insert(s.length() - 1, String.valueOf(space)); } } } }
И присвойте его конкретному полю:
inputField.addTextChangedListener(new OwnWatcher());
Вывод получится как на картинке:

Комментариев нет:

Отправить комментарий