工具类:限制EditText输入小数位数,按照金额格式进行输入
2018-03-02 本文已影响0人
心灵屋宿客
APP里面经常需要设置EditText只能按照金额格式进行输入,正好整理一个工具类,日后可以直接拿去复制粘贴使用。嗯……懒惰使人进步!
首先可以限制EditText的长度,如果是金额的话,一个小目标怎么也够了。嗯……算上小数点一共12位,那么就在EditText的属性下加上 android:maxLength="12"
。
然后直接套用下面的工具类,把对应的EditText以及限制的位数直接传进去就好了。
/**
* 设置EditText为价钱输入模式
*
* @param editText 相应的EditText
* @param digits 限制的小数位数
*/
public static void setPriceMode(final EditText editText, final int digits) {
// 设置输入类型为小数数字,允许十进制小数点提供分数值。
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
// 给EditText设置文本变动监听事件
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// 如果文本包括".",删除“.”后面超过2位后的数据
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > digits) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + digits + 1);
editText.setText(s);
editText.setSelection(s.length()); //光标移到最后
}
}
// 未输入数字的情况下输入小数点时,个位数字自动补零
if (s.toString().trim().substring(0).equals(".")) {
s = "0" + s;
editText.setText(s);
editText.setSelection(2);
}
// 如果文本以"0"开头并且第二个字符不是".",不允许继续输入
if (s.toString().startsWith("0")
&& s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
editText.setText(s.subSequence(0, 1));
editText.setSelection(1);
return;
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}