EditText 限制輸入整數和小數 的位元,edittext整數

來源:互聯網
上載者:User

EditText 限制輸入整數和小數 的位元,edittext整數

 

 

  如題,本文主要說的就是  如何限制 EditText 中 可輸入整數和小數 的位元 。

  近期,由於公司業務需求中有價格輸入功能,給出的要求說是,必須整數能輸入幾位,小數能輸入幾位。。。好嘛,產品一句話,開發人員就得忙好久。平時工作過程中,一般用到的都是限制輸入內容的長度而已,像這種限制 數值輸入的整數位和小數位的需求還真不怎麼多見。當時,做到這個的時候,我也有種懵逼的感覺,感覺真是太麻煩了,,後來想了想,只要分析清楚了,還是挺容易的。現整理出來,希望能協助到有需要的人。

  

  用法如下:

  

        EditText etTest = (EditText) findViewById(R.id.et_test);        etTest.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);        etTest.addTextChangedListener(new DecimalInputTextWatcher(etTest,3,5));// 整數最多3位,小數最多5位

  實現的原理就是  實現 implements TextWatcher,重寫其中的方法 :

public void afterTextChanged(Editable editable){}

 

  

DecimalInputTextWatcher 源碼:
import android.text.Editable;import android.text.InputFilter;import android.text.TextWatcher;import android.widget.EditText;/** * EditText 限制輸入整數和小數 的位元 * 預設 整數位無限制,小數位 最多2位 * <p> * Created by dingzuoqiang on 2017/11/24. * 530858106@qq.com */public class DecimalInputTextWatcher implements TextWatcher {    /**     * 需要設定該 DecimalInputTextWatcher 的 EditText     */    private EditText editText = null;    /**     * 預設  小數的位元   2 位     */    private static final int DEFAULT_DECIMAL_DIGITS = 2;    private int decimalDigits;// 小數的位元    private int integerDigits;// 整數的位元    public DecimalInputTextWatcher(EditText editText) {        this.editText = editText;        this.decimalDigits = DEFAULT_DECIMAL_DIGITS;    }    /**     * @param editText      editText     * @param decimalDigits 小數的位元     */    public DecimalInputTextWatcher(EditText editText, int decimalDigits) {        this.editText = editText;        if (decimalDigits <= 0)            throw new RuntimeException("decimalDigits must > 0");        this.decimalDigits = decimalDigits;    }    /**     * @param editText      editText     * @param integerDigits 整數的位元     * @param decimalDigits 小數的位元     */    public DecimalInputTextWatcher(EditText editText, int integerDigits, int decimalDigits) {        this.editText = editText;        if (integerDigits <= 0)            throw new RuntimeException("integerDigits must > 0");        if (decimalDigits <= 0)            throw new RuntimeException("decimalDigits must > 0");        this.integerDigits = integerDigits;        this.decimalDigits = decimalDigits;    }    @Override    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {    }    @Override    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {    }    @Override    public void afterTextChanged(Editable editable) {        String s = editable.toString();        editText.removeTextChangedListener(this);        if (s.contains(".")) {            if (integerDigits > 0) {                editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(integerDigits + decimalDigits + 1)});            }            if (s.length() - 1 - s.indexOf(".") > decimalDigits) {                s = s.substring(0,                        s.indexOf(".") + decimalDigits + 1);                editable.replace(0, editable.length(), s.trim());            }        } else {            if (integerDigits > 0) {                editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(integerDigits + 1)});                if (s.length() > integerDigits) {                    s = s.substring(0, integerDigits);                    editable.replace(0, editable.length(), s.trim());                }            }        }        if (s.trim().equals(".")) {            s = "0" + s;            editable.replace(0, editable.length(), s.trim());        }        if (s.startsWith("0")                && s.trim().length() > 1) {            if (!s.substring(1, 2).equals(".")) {                editable.replace(0, editable.length(), "0");            }        }        editText.addTextChangedListener(this);    }}

 

  源碼下載

 

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.