17

EditTextユーザーが最大 7 つの数字と小数点以下 2 桁を入力できるボックスがあります。7 桁を入力した後、もう 1 桁追加することはできませんが、小数点以下 2 桁までは許可されます。小数点以下 2 桁の小数フィルターを使用し、このコードを XML で使用します

android:maxLength="7"    
android:imeOptions="actionDone"                  
android:inputType="numberDecimal"

ただし、 8桁EditTextまで許可しています。enterこれはどのように解決できますか?

4

9 に答える 9

29

onCreateでこれを試してください

 youreditText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,1)});

これはあなたのプログラムのどこにでもあります

   public class DecimalDigitsInputFilter implements InputFilter {

        Pattern mPattern;

        public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
            mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
        }

        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                Matcher matcher=mPattern.matcher(dest);       
                if(!matcher.matches())
                    return "";
                return null;
            }

        }
于 2014-04-29T10:09:23.153 に答える
0

次のように Android データバインディングを使用すると、それを強化できます。

カスタム バインディング アダプターを定義します。

@BindingAdapter({"digitsBeforeZero", "digitsAfterZero"})
public void bindAmountInputFilter(EditText view, int digitsBeforeZero, int digitsAfterZero) {
       view.setFilters(new InputFilter[]{new DecimalDigitsInputFilter(digitsBeforeZero, digitsAfterZero)});
 }

EditText に属性を追加します。

app:digitsBeforeZero="@{7}"
app:digitsAfterZero="@{2}"

そして、編集テキストの入力フィルターを自動的に設定します

于 2017-11-22T13:20:44.763 に答える