ツールクラス:EditText入力小数位数を制限し、金額フォーマットで入力する

2309 ワード

アプリにはEditTextを設定する必要があります.金額フォーマットでしか入力できません.ちょうどツール類を整理して、後でコピーして貼り付けることができます.うん......怠け者は人を進歩させる!
まずはEditTextの長さを制限することができますが、金額なら小さな目標でも十分です.ええと、小数点を含めて12桁です.では、EditTextの属性にandroid:maxLength="12"を加えます.そして下のツール類をそのままセットして、対応するEditTextや制限された桁数をそのまま入れればいいのです.
    /**
     *   EditText       
     *
     * @param editText    EditText
     * @param digits          
     */
    public static void setPriceMode(final EditText editText, final int digits) {
//                   ,             。
        editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
//         EditText          
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
//                      ".",  “.”    2     
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > digits) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + digits + 1);
                        editText.setText(s);
                        editText.setSelection(s.length()); //      
                    }
                }
//                               ,        
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }
//                     "0"           ".",       
                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }

        });
    }