Использование метода ontextchanged событие полей EditText, когда я нажимаю на номер?
Привет, у меня есть EditText
с "text = 0.00". когда я нажимаю цифру 3, это должно быть похоже на 0.03, а во второй раз, когда я нажимаю цифру 5, текст должен быть 0.35. И 35.0, 35.09 вот так. EditText
, изначально имеющее значение 0.00.
Все это делается с помощью одного и того же EditText
.
Как мне этого добиться? Я примерил addTextChangedListener()
с TextWatcher()
.
3 ответа:
Вы выбрали правильный подход. Вы должны расширить класс с помощью TextWatcher и переопределить
afterTextChanged()
,beforeTextChanged()
,onTextChanged()
.Вы должны написать желаемую логику в методе
afterTextChanged()
, чтобы достичь нужной вам функциональности.
Вы также можете попробовать следующее:
EditText searchTo = (EditText)findViewById(R.id.medittext); searchTo.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { doSomething(); } });
Здесь я написал что-то похожее на то, что вам нужно:
inputBoxNumberEt.setText(". "); inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length()); inputBoxNumberEt.addTextChangedListener(new TextWatcher() { boolean ignoreChange = false; @Override public void afterTextChanged(Editable s) { } @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 (!ignoreChange) { String string = s.toString(); string = string.replace(".", ""); string = string.replace(" ", ""); if (string.length() == 0) string = ". "; else if (string.length() == 1) string = ". " + string; else if (string.length() == 2) string = "." + string; else if (string.length() > 2) string = string.substring(0, string.length() - 2) + "." + string.substring(string.length() - 2, string.length()); ignoreChange = true; inputBoxNumberEt.setText(string); inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length()); ignoreChange = false; } } });