實(shí)現(xiàn)一個(gè)可以設(shè)置最高價(jià)的Edittext

這兩天產(chǎn)品有一個(gè)需求。

價(jià)格.jpg

左右都是editText

最低價(jià)價(jià)格有上限,價(jià)格不能高于最高價(jià)。

自定義一個(gè)customeEditText繼承EditText,實(shí)現(xiàn)一個(gè)inputFilter
inputFilter對(duì)插入的值進(jìn)行檢查,
如果合法,return null
如果不合法 retrun ""

this.setFilters(new InputFilter[]{moneyInputFilter, new   
InputFilter.LengthFilter(LENGTH)});
  private InputFilter moneyInputFilter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            String inputStr = dest.toString() + source.toString();
            int inputInt = NumberUtils.parseStrToInt(inputStr);
            if (maxValue < inputInt) {
                return "";
            }
            return null;
        }
    }; 
source start end dest dstart dend
要插入到edittext里的字符 插入字符開(kāi)始位置,0開(kāi)始 插入字符結(jié)束位置 edittext里已經(jīng)有的字符 edittext里光標(biāo)的開(kāi)始位置 edittext里光標(biāo)結(jié)束的位置

dstart和dend的含義,inputfilter里的說(shuō)明我沒(méi)看懂。經(jīng)我測(cè)試后,大部分情況下這兩個(gè)值是相同的。在按刪除的時(shí)候dstart比dend值小1

endinput.gif

用戶(hù)在數(shù)值末尾輸入,能對(duì)數(shù)值正常檢查

middleinput.gif

假如用戶(hù)光標(biāo)移動(dòng)到中間再輸入一個(gè)5,5545,大于最大值5455,(這里的示意圖邏輯我已經(jīng)處理過(guò))如果按照上面的邏輯,這個(gè)5會(huì)被加到末尾,數(shù)值是5455,仍然可以輸入的。但是這明顯不符合需求

修改邏輯

 private InputFilter moneyInputFilter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            StringBuilder sb = new StringBuilder(dest);
            sb.insert(dstart, source);
            int inputInt = NumberUtils.parseStrToInt(sb.toString());
            if (maxValue < inputInt) {
                ToastMaster.show(getContext(),"輸入價(jià)格超出了最大價(jià)格");
                return "";
            }
            return null;
        }
    };

這種方式,將用戶(hù)輸入的值插入到光標(biāo)位置,再進(jìn)行數(shù)值檢查。
測(cè)試了幾種情況,是滿(mǎn)足需求的。

然而,加了這個(gè)inputFilter以后,再設(shè)置maxLength,不管用了。
需要自己增加length的filter

 this.setFilters(new InputFilter[]{moneyInputFilter, new InputFilter.LengthFilter(LENGTH)});

沖突的原因 http://www.lxweimin.com/p/92f51642d59f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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