1. 程式人生 > >Android金額輸入框只允許輸入小數點後兩位

Android金額輸入框只允許輸入小數點後兩位

一:要實現這個效果也不是很複雜,只需要設定輸入框輸入的字元型別、設定InputFilter、設定輸入變化監聽即可。下面直接來看程式碼吧….

二:new 一個class extends AppCompatEditText並寫上一個初始化函式

private void init() {
    //設定輸入框允許輸入的型別(正則)
    //對應的佈局屬性是--->android:digits="0123456789."
    setKeyListener(DigitsKeyListener.getInstance("0123456789."));
    //設定輸入字元
    setFilters(new
InputFilter[]{inputFilter}); addTextChangedListener(this); }

三:inputFilter來分割小數後的保留位數

private InputFilter inputFilter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        // 刪除等特殊字元,直接返回
        if
(TextUtils.isEmpty(source)) { return null; } String dValue = dest.toString(); String[] splitArray = dValue.split("\\."); if (splitArray.length > 1) { String dotValue = splitArray[1]; // 2 表示輸入框的小數位數 int diff = dotValue.length() + 1
- 2; if (diff > 0) { return source.subSequence(start, end - diff); } } return null; } };

如果你想保留其它位數的小數,只需要把上面的2改成你需要的位數即可。

三:輸入框輸入變化的監聽,來處理小數點不能出現在第一位&&不能出現多個

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    //如果輸入框為空則不處理
    if (TextUtils.isEmpty(s)) {
        return;
    }
    //第一個字元不為小數點
    if (s.length() == 1 && s.toString().equals(".")) {
        setText("");
        return;
    }
    int counter = counter(s.toString(), '.');
    if (counter > 1) {
        //小數點第一次出現的位置
        int index = s.toString().indexOf('.');
        setText(s.subSequence(0, index + 1));
    }
    setSelection(getText().toString().length());
}

四:統計一個字元在字串中出現的次數

/**
 * 統計一個字元在字串中出現的次數
 *
 * @param s 字串
 * @param c 字元
 * @return 數量
 */
public int counter(String s, char c) {
    int count = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == c) {
            count++;
        }
    }
    return count;
}

就這幾步就可以輕鬆實現了,想看原始碼的點選這裡哦原始碼連結