android edittext|Android中EditText一秒变身金额输入框

更新时间:2020-03-29    来源:.Net开发    手机版     字体:

【www.bbyears.com--.Net开发】

最近做的一个项目需要用到充值和提现金额,那么就需要在输入框中实现带小数点的金额数字,同时保证小数点后两位,于是在网上查了一些资料,实现了这样的功能。

首先,我们需要在布局中EditText中的属性里加上这样一句话:android:inputType=“numberDecimal”,表示输入的时候只能输入浮点型的数据。

自定义一个类,在这里写功能。

 代码如下

import android.text.InputFilter;

import android.text.Spanned;
import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* joy on 2015/12/17.

*

* 金额输入格式

*/

public class EditInputFilter implements InputFilter {

/**

* 最大数字,我们取int型最大值

*/

public static final int MAX_VALUE = 2147483647;

/**

* 小数点后的数字的位数

*/

public static final int PONTINT_LENGTH = 2;

Pattern p;

public EditInputFilter(){

p = Pattern.compile(“[0-9]*”);   //除数字外的其他的

}

/**

*  source    新输入的字符串

*  start    新输入的字符串起始下标,一般为0

*  end    新输入的字符串终点下标,一般为source长度-1

*  dest    输入之前文本框内容

*  dstart    原内容起始坐标,一般为0

*  dend    原内容终点坐标,一般为dest长度-1

*/

@Override

public CharSequence filter(CharSequence src, int start, int end,

Spanned dest, int dstart, int dend) {

String oldtext =  dest.toString();

System.out.println(oldtext);

//验证删除等按键

if (“”.equals(src.toString())) {

return null;

}

//验证非数字或者小数点的情况

Matcher m = p.matcher(src);

if(oldtext.contains(“.”)){

//已经存在小数点的情况下,只能输入数字

if(!m.matches()){

return null;

}

}else{

//未输入小数点的情况下,可以输入小数点和数字

if(!m.matches() && !src.equals(“.”) ){

return null;

}

}

//验证输入金额的大小

if(!src.toString().equals(“”)){

double dold = Double.parseDouble(oldtext+src.toString());

if(dold > MAX_VALUE){

return dest.subSequence(dstart, dend);

}else if(dold == MAX_VALUE){

if(src.toString().equals(“.”)){

return dest.subSequence(dstart, dend);

}

}

}

//验证小数位精度是否正确

if(oldtext.contains(“.”)){

int index = oldtext.indexOf(“.”);

int len = dend – index;

//小数位只能2位

if(len > PONTINT_LENGTH){

CharSequence newText = dest.subSequence(dstart, dend);

return newText;

}

}

return dest.subSequence(dstart, dend) +src.toString();

}

}

如何使用我们自定义的类呢,只需要在相应的Activity中定义EditText 控件edit_takeout_money;,然后:

InputFilter[] filters = { new EditInputFilter() };

edit_takeout_money.setFilters(filters);

就OK了

本文来源:http://www.bbyears.com/asp/90427.html

热门标签

更多>>

本类排行