
需求要求可以最多输入4位整数并且小数部分最多输入2位也就是xxxx.xx类型的字符串中间包含很多组合比如xxx.x或者xx.xx等等所以为了方便下一次使用决定自定义一个Edittext。思路监听输入框的字符输入符合要求则显示不符合要求则显示上一次的字符废话不多说直接上代码1自定义的EditText:public classFloatEditTextViewextendsEditTextimplementsTextWatcher {privateStringlastNumber;privateContextcontext;private intinteger_part;//整数部分private intdecimal_part;//小数部分publicFloatEditTextView(Context context) {this(context,null);}publicFloatEditTextView(Context context,AttributeSet attrs) {this(context,attrs,android.R.attr.editTextStyle);}publicFloatEditTextView(Context context,AttributeSet attrs, intdefStyleAttr) {super(context,attrs,defStyleAttr);this.contextcontext;init(attrs);}private voidinit(AttributeSet attrs) { TypedArray typedArray context.getTheme().obtainStyledAttributes( attrs,R.styleable.FloatEditTextView,0,0);setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);integer_parttypedArray.getInteger(R.styleable.FloatEditTextView_integer_part,1);decimal_parttypedArray.getInteger(R.styleable.FloatEditTextView_decimal_part,1);if(integer_part0decimal_part0) { addTextChangedListener(this);} }Overridepublic voidonTextChanged(CharSequence text, intstart, intlengthBefore, intlengthAfter) { }Overridepublic voidbeforeTextChanged(CharSequence s, intstart, intcount, intafter) {lastNumber s.toString();}Overridepublic voidafterTextChanged(Editable s) { String temp s.toString();intposDot temp.indexOf(.);if(Pattern.matches(^[0-9]{1,integer_part}(\\.[0-9]{1,decimal_part})?$,temp)) {if(temp.startsWith(0)!temp.equals(0)){if(posDot1||posDot0){ setText(temp.substring(1));setSelection(getText().length());} } }else{if(temp.endsWith(.)) {if(temp.length() 1) { setText(0.0);return;}if(temp.length() lastNumber.length()) { String str temp.substring(0,temp.length() -1);setText(str);setSelection(getText().length());return;}else{return;} }else if(temp.startsWith(.)) { setText(temp.substring(1,getText().length()));return;}else{if(!TextUtils.isEmpty(temp)temp!lastNumber) { setText(lastNumber);setSelection(getText().length());} } } }/*** 输入框编辑状态*/public voidsetEditable(booleanflag) { setFocusable(flag);setFocusableInTouchMode(flag);} }2.资源文件中定义自己需要的属性这里也就是使用过程中需要传递的参数integer_part代表整数部分的位数decimal_part代表小数部分的位数declare-styleablenameFloatEditTextViewattrnameinteger_partformatinteger/attrattrnamedecimal_partformatinteger/attr/declare-styleable3.使用该自定义的viewcom.view.FloatEditTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textColorcolor/common_blackandroid:textSize16spandroid:backgroundnullmyView:integer_part4myView:decimal_part2/这里两个参数分别传了4和2也就是最多整数4位小数2位分享至此就结束了这个过程中最关键的还是正则表达式的书写做出准确的判断如果各位还有更好的办法欢迎分享。