欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-10-24 17:15:38
在edittext输入数字的时候,通常我们需要限制小数点前后位数。比如金额输入一般我们需要限制小数点后面最多2位。我们可以通过 textwatcher 实现。...

在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位

以上这篇edittext限制小数点前后位数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。