Android EditText-限制輸入小數(shù)位數(shù)

在一些要輸入金額的輸入框中屯耸,通常會(huì)有限制輸入小數(shù)位數(shù)的要求拐迁,提供一個(gè)用TextWatcher實(shí)現(xiàn)的方式。
輸入規(guī)則:
1.輸入0時(shí)疗绣,不再進(jìn)行輸入
2.首位輸入小數(shù)點(diǎn)時(shí)线召,小數(shù)點(diǎn)前自動(dòng)補(bǔ)0
3.超出小數(shù)限制位數(shù),禁止繼續(xù)輸入
4.超出總限制字符數(shù)多矮,禁止輸入


import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * Description: 小數(shù)位數(shù)限定
 */

public class DecimalInputTextWatcher implements TextWatcher {

    private static final String Period = ".";
    private static final String Zero = "0";

    /**
     * 需要設(shè)置該 DecimalInputTextWatcher 的 EditText
     */
    private EditText editText = null;

    /**
     * 默認(rèn)  小數(shù)的位數(shù)   2 位
     */
    private static final int DEFAULT_DECIMAL_DIGITS = 2;

    private int decimalDigits;// 小數(shù)的位數(shù)
    private int totalDigits;//最大長(zhǎng)度

    /**
     * @param editText      editText
     * @param totalDigits   最大長(zhǎng)度
     * @param decimalDigits 小數(shù)的位數(shù)
     */
    public DecimalInputTextWatcher(EditText editText, int totalDigits, int decimalDigits) {
        if (editText == null) {
            throw new RuntimeException("editText can not be null");
        }
        this.editText = editText;
        if (totalDigits <= 0)
            throw new RuntimeException("totalDigits must > 0");
        if (decimalDigits <= 0)
            throw new RuntimeException("decimalDigits must > 0");
        this.totalDigits = totalDigits;
        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) {
        try {
            String s = editable.toString();
            editText.removeTextChangedListener(this);
            //限制最大長(zhǎng)度
            editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(totalDigits)});

            if (s.contains(Period)) {
                //超過(guò)小數(shù)位限定位數(shù),只保留限定小數(shù)位數(shù)
                if (s.length() - 1 - s.indexOf(Period) > decimalDigits) {
                    s = s.substring(0,
                            s.indexOf(Period) + decimalDigits + 1);
                    editable.replace(0, editable.length(), s.trim());
                }
            }
            //如果首位輸入"."自動(dòng)補(bǔ)0
            if (s.trim().equals(Period)) {
                s = Zero + s;
                editable.replace(0, editable.length(), s.trim());
            }
            //首位輸入0時(shí),不再繼續(xù)輸入
            if (s.startsWith(Zero)
                    && s.trim().length() > 1) {
                if (!s.substring(1, 2).equals(Period)) {
                    editable.replace(0, editable.length(), Zero);
                }
            }
            editText.addTextChangedListener(this);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

使用時(shí):
edit需要先限定輸入方式:


示例.png

調(diào)用:

EditText numberDecimalEt = findViewById(R.id.number_decimal_et);
//輸入總長(zhǎng)度15位缓淹,小數(shù)2位
numberDecimalEt.addTextChangedListener(new DecimalInputTextWatcher(numberDecimalEt, 15, 2));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哈打,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子讯壶,更是在濱河造成了極大的恐慌料仗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伏蚊,死亡現(xiàn)場(chǎng)離奇詭異立轧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)躏吊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)氛改,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颜阐,你說(shuō)我怎么就攤上這事平窘。” “怎么了凳怨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瑰艘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肤舞,道長(zhǎng)紫新,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任李剖,我火速辦了婚禮芒率,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篙顺。我一直安慰自己偶芍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布德玫。 她就那樣靜靜地躺著匪蟀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宰僧。 梳的紋絲不亂的頭發(fā)上材彪,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音琴儿,去河邊找鬼段化。 笑死,一個(gè)胖子當(dāng)著我的面吹牛造成,可吹牛的內(nèi)容都是我干的显熏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晒屎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼佃延!你這毒婦竟也來(lái)了现诀?” 一聲冷哼從身側(cè)響起夷磕,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤履肃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坐桩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尺棋,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绵跷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膘螟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碾局,死狀恐怖荆残,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情净当,我是刑警寧澤内斯,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站像啼,受9級(jí)特大地震影響俘闯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忽冻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一真朗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僧诚,春花似錦遮婶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赶么,卻和暖如春肩豁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辫呻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工清钥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人放闺。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓祟昭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親怖侦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子篡悟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 首先提到一個(gè)輸入過(guò)濾器谜叹,用來(lái)約束用戶輸入的內(nèi)容關(guān)鍵接口:InputFilters我們現(xiàn)在要做的就是重寫(xiě)這個(gè)接口 調(diào)用示例
    jarylan閱讀 5,357評(píng)論 5 21
  • ———通過(guò)EditText輸入小數(shù)時(shí),可指定整數(shù)或小數(shù)的位數(shù) 如需下載源碼搬葬,請(qǐng)?jiān)L問(wèn)https://github.c...
    afa1332閱讀 2,913評(píng)論 8 57
  • Web網(wǎng)站測(cè)試流程和方法(轉(zhuǎn)載) 1測(cè)試流程與方法 1.1測(cè)試流程 進(jìn)行正式測(cè)試之前荷腊,應(yīng)先確定如何開(kāi)展測(cè)試,不可盲...
    夏了夏夏夏天閱讀 1,295評(píng)論 0 0
  • 看慣了可能是XXX最好的急凰,可能是XXXX目前最好的女仰,今天我也用下這個(gè)標(biāo)題,哈哈抡锈。別噴我疾忍,當(dāng)然我也就吹吹牛。有很多好...
    青蛙要fly閱讀 1,622評(píng)論 3 9
  • 每當(dāng)我看透明的風(fēng) 吹醒白色的羽翼 卻不得不垂眸 看紅花兒開(kāi)出紫葉 因?yàn)橐睾?眼底那一抹水色
    Zover閱讀 449評(píng)論 0 0