为了美观,先限制一下
android:inputType="numberDecimal"
android:maxLength="9"
1.要求与思路
细节要求:
- 以小数点开头,前面自动加上 “0”
- 以小数点结尾,去掉小数点
思路:利用 EditText 的输入监听实现小数位的截取,和移动光标到末尾,在失去焦点后,去掉结尾的小数点
2. 解决办法:添加监听
添加输入监听:
editText.addTextChangedListener(new TextWatcher() {
boolean deleteLastChar;// 是否需要删除末尾
@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().contains(".")) {
// 如果点后面有超过三位数值,则删掉最后一位
int length = s.length() - s.toString().lastIndexOf(".");
// 说明后面有三位数值
deleteLastChar = length >= 4;
}
}
@Override
public void afterTextChanged(Editable s) {
if (s == null) {
return;
}
if (deleteLastChar) {
// 设置新的截取的字符串
editText.setText(s.toString().substring(0, s.toString().length() - 1));
// 光标强制到末尾
editText.setSelection(editText.getText().length());
}
// 以小数点开头,前面自动加上 "0"
if (s.toString().startsWith(".")) {
editText.setText("0" + s);
editText.setSelection(editText.getText().length());
}
}
});
添加失去焦点监听:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
EditText editText1 = (EditText) v;
// 以小数点结尾,去掉小数点
if (!hasFocus && editText1.getText() != null && editText1.getText().toString().endsWith(".")) {
editText.setText(editText1.getText().subSequence(0, editText1.getText().length() - 1));
editText.setSelection(editText.getText().length());
}
}
});