Я нашел TextWatcher немного громоздким. Вместо этого вы можете установить ключевой слушатель:
setKeyListener(new CalculatorKeyListener());
// Must be called after setKeyListener(), otherwise is overridden
setRawInputType(Configuration.KEYBOARD_12KEY);
А затем создайте KeyListener, который расширяет NumberKeyListener:
class CalculatorKeyListener extends NumberKeyListener {
@Override
public int getInputType() {
return InputType.TYPE_CLASS_NUMBER;
}
@Override
public boolean onKeyDown(View view, Editable content, int keyCode, KeyEvent event) {
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
digitPressed(keyCode - KeyEvent.KEYCODE_0);
} else if (keyCode == KeyEvent.KEYCODE_DEL) {
deletePressed();
}
return true;
}
@Override
protected char[] getAcceptedChars() {
return new char[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
}
}
Затем вам нужно правильно отобразить символы, но это не сложно; просто следите за центами, а затем делите или умножайте на 10 и используйте NumberFormat для правильного форматирования.