EditText只能输入2位小数及一个小数点
2017-04-01 10:39
127 查看
项目新需求:EditText输入的数值只能输入2位小数…
想看详细的,往下看:
这需求挺简单的,妥妥的
一运行,恩挺简单的,完美…
然后手贱试了下,我擦,居然符号和.可以输入多个…
难道是digits失效了?那换一个方法吧…
又在EditText的xml属性里面添加了
to young…还是不行…
于是使用正则…不行
再使用InputFilter,发现有点用…但是还是能够输入多个”.”以及”-“
http://blog.csdn.net/a1533588867/article/details/53035475这是使用InputFilter链接…
我明明在speChat里面添加了”-“还是不行,而且还得额外监听…
实际使用发现xml里面设置digits并没有什么卵用,删掉…使用代码设置
clean,rebuild,run…
怎么弹出的是英文键盘….
怎么还能输入多个”.”….
我xml里面设置的难道和这边重写的重了?删掉这边重写的…
再次运行…
弹出的是数字键盘,完美…
还是能输入多个”.”……….
要不写个逻辑判断一下”.”如果有多的”.”就给截掉算了…
还是再找找,应该有更完美的方法.
这方法返回的是一个数组,我要的结果无疑是CHARACTERS[2].
看看SIGN=1,DECIMAL=2.
根据 | 的运算规则…
只有 kind = (00)B | (10)B = (10)B = 2;
也就是sign = false,decimal = true;
尝试设置一下
弹出的是数字键盘,不能输入其他符号,只能输入一个小数点…
最终:
直接看结果的:
//只允许输入一个小数点和0--9的数字 mEditText.setKeyListener(new DigitsKeyListener(false, true));
想看详细的,往下看:
1.只允许输入2位小数
editText在xml里面添加了android:digits=".0123456789"
这需求挺简单的,妥妥的
mEditText.addTextChangedListener(new TextWatcher() { @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 s) { String editStr = s.toString().trim(); int posDot = editStr.indexOf("."); //不允许输入3位小数,超过三位就删掉 if (posDot < 0) { return; } if (editStr.length() - posDot - 1 > 2) { s.delete(posDot + 3, posDot + 4); } else { //TODO...在这里写逻辑 } } });
一运行,恩挺简单的,完美…
然后手贱试了下,我擦,居然符号和.可以输入多个…
难道是digits失效了?那换一个方法吧…
又在EditText的xml属性里面添加了
android:inputType="numberDecimal"
to young…还是不行…
于是使用正则…不行
再使用InputFilter,发现有点用…但是还是能够输入多个”.”以及”-“
http://blog.csdn.net/a1533588867/article/details/53035475这是使用InputFilter链接…
我明明在speChat里面添加了”-“还是不行,而且还得额外监听…
2.换个方法,使用setInputType()方法
private void setInputType(EditText edit) { edit.setKeyListener(new DigitsKeyListener() { @Override public int getInputType() { return InputType.TYPE_NUMBER_FLAG_DECIMAL; } @Override protected char[] getAcceptedChars() { String digists = "1234567890."; char[] data = digists.toCharArray(); return data; } }); }
实际使用发现xml里面设置digits并没有什么卵用,删掉…使用代码设置
clean,rebuild,run…
怎么弹出的是英文键盘….
怎么还能输入多个”.”….
我xml里面设置的难道和这边重写的重了?删掉这边重写的…
private void setInputType(EditText edit) { edit.setKeyListener(new DigitsKeyListener() { @Override protected char[] getAcceptedChars() { String digists = "1234567890."; char[] data = digists.toCharArray(); return data; } }); }
再次运行…
弹出的是数字键盘,完美…
还是能输入多个”.”……….
要不写个逻辑判断一下”.”如果有多的”.”就给截掉算了…
还是再找找,应该有更完美的方法.
3.查看DigitsKeyListener源码
看看edit.setKeyListener(new DigitsKeyListener() {...}里面的DigitsKeyListener吧.
private char[] mAccepted; private static final int SIGN = 1; private static final int DECIMAL = 2; private static final char[][] CHARACTERS = { { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }, { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '+' }, { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }, { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '+', '.' }, }; /** * Allocates a DigitsKeyListener that accepts the digits 0 through 9, * plus the minus sign (only at the beginning) and/or decimal point * (only one per field) if specified. */ public DigitsKeyListener(boolean sign, boolean decimal) { mSign = sign; mDecimal = decimal; int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0); mAccepted = CHARACTERS[kind]; }
这方法返回的是一个数组,我要的结果无疑是CHARACTERS[2].
看看SIGN=1,DECIMAL=2.
根据 | 的运算规则…
只有 kind = (00)B | (10)B = (10)B = 2;
也就是sign = false,decimal = true;
尝试设置一下
mEditText.setKeyListener(new DigitsKeyListener(false, true));
弹出的是数字键盘,不能输入其他符号,只能输入一个小数点…
最终:
//只允许输入一个小数点和0--9的数字 mEditText.setKeyListener(new DigitsKeyListener(false, true));
mEditText.addTextChangedListener(new Text
b7e6
Watcher() {
@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 s) {
String editStr = s.toString().trim();
int posDot = editStr.indexOf(".");
//不允许输入3位小数,超过三位就删掉
if (posDot < 0) {
return;
}
if (editStr.length() - posDot - 1 > 2) {
s.delete(posDot + 3, posDot + 4);
} else {
//TODO...这里写逻辑
}
}
});
相关文章推荐
- UITextField只能输入数字以及输入数字和小数点并且小数点后保留2位小数
- c# 控制TextBox只能输入小数(只能输入一个小数点,小数点后只能输入两位,第一位不能是小数点)
- UITextField 只能输入数字、一个小数点、只能有两位小数
- c# 控制TextBox只能输入小数(只能输入一个小数点,小数点后只能输入两位,首位是小数点离开时自动补0,末位是小数点离开时自动清除)
- EditText限制输入的小数点只能一个
- UITextField 只能输入数字和小数点,只能有两位小数
- flex textinput 如何限定只能输入一个小数点
- edit中只能输入数字、小数点(只可以1个小数点)和负号+多个edit共用一个事件
- JS控制文本框只能输入正整数和两位小数点以内的小数
- javascript 验证 只能输入数字和一个小数点
- JS控制文本框只能输入正整数和两位小数点以内的小数
- 限制输入框中只能输入数和小数点,且小数点后只能有两位小数
- edit编辑框只能输入数字和一个小数点
- 输入金钱,只能输入整数或者小数,且小数点不能多个
- 正则限制文本框只能输入数字||只能是数字和一个小数点||只能是整数和浮点数
- JS只能输入数字一个小数点可输入负号
- JS 限制用户只能输入小数点后2位,以及四舍五入
- 编辑框只能输入一个小数点
- 只能输入数字只能有一个小数点,小数点不能在开头,不能在结尾,第一位允许添加负号
- javascript验证只能输入数字和一个小数点示例