Android EditText实现输入金额类型详解实现输入金额类型详解
前言前言
众所周知,Android中的editText默认的属性里面是没有金额类型的,所以要实现这个功能我们就必须自己动手丰衣足食。下面
话不多说了,来一起看看详细的介绍吧。
一一.EditText只允许输入数字、小数点。只允许输入数字、小数点。
首先要知道金额有两部分构成,整数部分和小数部分,要实现只输入数字和小数点很简单。自己查能很容易查到。
把type设置成InputType.TYPE_NUMBER_FLAG_DECIMAL|InputType.TYPE_CLASS_NUMBER 就行
那这样做有个缺点,小数部分可以有很多位。而我们知道金额类型的小数部分只能有两位,所以这个方法不合适。
二二.设置字符过滤设置字符过滤
网上有很多文章都是这样写。
mEdit.setFilters(new InputFilter[]{new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if(source.equals(".") && dest.toString().length() == 0){
return "0.";
}
if(dest.toString().contains(".")){
int index = dest.toString().indexOf(".");
int mlength = dest.toString().substring(index).length();
if(mlength == 3){
return "";
}
}
return null;
}
}});
这样的做法能实现是能实现,但是这样的写法没有考虑到很多种会出现的情况,也就是说只是这样写的话,在某些情况下的用
户体验很不好。
三三.设置监听设置监听addTextChangedListener
上面的第二种方法你可以在里边加自己的算法来处理特殊情况,但是我不太喜欢这个方法,直到我看到一个哥们用
addTextChangedListener来实现。我才发现,用addTextChangedListener来做金额类型的输入挺合适的。虽然也是要自己写
算法去解决特殊情况下的问题,但是用起来比第二种方法舒服。
我先贴代码再做解释。我先贴代码再做解释。
public class EditTextUtils {
/**
* 设置edittext只能输入小数点后两位
*/
public static void afterDotTwo(final EditText editText) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// 限制最多能输入9位整数
if (s.toString().contains(".")) {
if (s.toString().indexOf(".") > 9) {
s = s.toString().subSequence(0,9) + s.toString().substring(s.toString().indexOf("."));
editText.setText(s);
editText.setSelection(9);
}
}else {
if (s.toString().length() > 9){
s = s.toString().subSequence(0,9);
editText.setText(s);
editText.setSelection(9);
}
}
// 判断小数点后只能输入两位
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
editText.setText(s);
评论0
最新资源