先上效果圖:
editText.setFilters(new InputFilter[]{new NumberDecimalFilter().setDigits(1)});
直接在代碼里面設(shè)置setFilters舍咖,setDigits就填1萎庭,
xml代碼
Activity 里面使用
NumberDecimalFilter? 自定義過濾器
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.DigitsKeyListener;
/**
* 描述? 限制小數(shù)點(diǎn)后輸入位數(shù)
* 默認(rèn)限制小數(shù)點(diǎn)2位
* 默認(rèn)第一位輸入小數(shù)點(diǎn)時(shí)作谚,轉(zhuǎn)換為0.
* 如果起始位置為0,且第二位跟的不是".",則無法后續(xù)輸入
*/
public class NumberDecimalFilter extends DigitsKeyListener {
public NumberDecimalFilter() {
super(false, true);
? ? }
/**
* 默認(rèn)保留 2 位置小數(shù)點(diǎn)
*/
? ? private int digits =2;
? ? public NumberDecimalFiltersetDigits(int d) {
digits = d;
return this;
? ? }
@Override
? ? public CharSequencefilter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
CharSequence out =super.filter(source, start, end, dest, dstart, dend);
? ? ? ? if (out !=null) {
source = out;
? ? ? ? ? ? start =0;
? ? ? ? ? ? end = out.length();
? ? ? ? }
int len = end - start;
? ? ? ? if (len ==0) {
return source;
? ? ? ? }
//以點(diǎn)開始的時(shí)候壤玫,自動(dòng)在前面添加0
? ? ? ? if (source.toString().equals(".") && dstart ==0) {
return "0.";
? ? ? ? }
//如果起始位置為0,且第二位跟的不是".",則無法后續(xù)輸入
? ? ? ? if (!source.toString().equals(".") && dest.toString().equals("0")) {
return "";
? ? ? ? }
int dlen = dest.length();
? ? ? ? for (int i =0; i < dstart; i++) {
if (dest.charAt(i) =='.') {
return (dlen - (i +1) + len >digits) ?
"" :
new SpannableStringBuilder(source, start, end);
? ? ? ? ? ? }
}
for (int i = start; i < end; ++i) {
if (source.charAt(i) =='.') {
if ((dlen - dend) + (end - (i +1)) >digits)
return "";
else
break;
? ? ? ? ? ? }
}
return new SpannableStringBuilder(source, start, end);
? ? }
}