软件编程
位置:首页>> 软件编程>> Android编程>> EditText限制小数点前后位数的实例

EditText限制小数点前后位数的实例

作者:jingxian  发布时间:2023-04-10 03:56:14 

标签:edittext,限制,小数点

在EditText输入数字的时候,通常我们需要限制小数点前后位数。比如金额输入一般我们需要限制小数点后面最多2位。我们可以通过 TextWatcher 实现。


public class MyWatcher implements TextWatcher {
 private int beforeDot;
 private int afterDot;
 /**
  * 构造器
  *
  * @param beforeDot 小数点前位数  不限制输入-1
  * @param afterDot 小数点后位数  不限制输入-1
  */
 public MyWatcher(int beforeDot, int afterDot) {
   this.beforeDot = beforeDot;
   this.afterDot = afterDot;
 }

@Override
 public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
 public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
 public void afterTextChanged(Editable s) {
   judge(s);
 }

private void judge(Editable editable) {
   String temp = editable.toString();
   int posDot = temp.indexOf(".");
   //直接输入小数点的情况
   if (posDot == 0) {
     editable.insert(0, "0");
     return;
   }
   //连续输入0
   if (temp.equals("00")) {
     editable.delete(1, 2);
     return;
   }
   //输入"08" 等类似情况
   if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) {
     editable.delete(0, 1);
     return;
   }

//不包含小数点 不限制小数点前位数
   if (posDot < 0 && beforeDot == -1) {
     //do nothing 仅仅为了理解逻辑而已
     return;
   } else if (posDot < 0 && beforeDot != -1) {
     //不包含小数点 限制小数点前位数
     if (temp.length() <= beforeDot) {
       //do nothing 仅仅为了理解逻辑而已
     } else {
       editable.delete(beforeDot, beforeDot + 1);
     }
     return;
   }

//如果包含小数点 限制小数点后位数
   if (temp.length() - posDot - 1 > afterDot && afterDot != -1) {
     editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数
   }
 }
}

使用的时候 如下:


<EditText
         android:id="@+id/et_i_want"
         android:layout_width="wrap_content"
         android:layout_height="25dp"
         android:hint="0.00"
         android:inputType="numberDecimal"/>etIWant.addTextChangedListener(new MyWatcher(-1, 2));//限制小数点后最多2位
0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com