editText限定位数

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

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);//删除小数点后多余位数

    }

  }

}

使用的时候 如下:

?

1

2

3

4

5

6

          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位

 

©CopyRight 2006-2019 JB51.Net Inc All Rights Reserved. 脚本之家 版权所有

你可能感兴趣的:(android)