在Android开发中经常会有输入框中限制小数点后面位数以及总的字数,比如EditText输入时,限制保留小数点后两位数,以及总字数不超过六位数。
实现:
首先布局里要加上输入类型的限制。
android:inputType="numberDecimal"
自定义控件,实现输入小数点保留两位小数以及字数限制6位。
public class DecimalEditText extends EditText { private static final int DEFAULT_DECIMAL_NUMBER = 2; /** * 保留小数点后多少位 */ private int mDecimalNumber = DEFAULT_DECIMAL_NUMBER; public DecimalEditText(Context context) { this(context,null, R.attr.editTextStyle); } public DecimalEditText(Context context, AttributeSet attrs) { this(context,attrs, R.attr.editTextStyle); } public DecimalEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DecimalEditText); mDecimalNumber = typedArray.getInt(R.styleable.DecimalEditText_decimalNumber,DEFAULT_DECIMAL_NUMBER); typedArray.recycle(); init(); } private void init(){ setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)}); setFilters(new InputFilter[]{new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String lastInputContent = dest.toString(); if (source.equals(".") && lastInputContent.length() == 0) { return "0."; } if (lastInputContent.contains(".")) { int index = lastInputContent.indexOf("."); if(dend - index >= mDecimalNumber + 1){ return ""; } } if(lastInputContent.length()>=6){ return ""; } return null; } }}); } public int getDecimalNumber() { return mDecimalNumber; } public void setDecimalNumber(int decimalNumber) { mDecimalNumber = decimalNumber; } }
attr文件中加入:
<declare-styleable name="DecimalEditText"> <attr name="decimalNumber" format="integer"/> </declare-styleable>简蛋粗暴,完成!