web-dev-qa-db-ja.com

android EditTextmaxLengthが機能していません

これは私のxmlです

<EditText
Android:id="@+id/et_comment"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textNoSuggestions|textVisiblePassword"
Android:hint="Provide comments here..."
Android:gravity="top"
Android:maxLength="5"
Android:textSize="12sp"
Android:visibility="visible"
/>

このコードを使用しても機能しません

TextView editEntryView = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(5);
editEntryView.setFilters(filterArray);

maxLenthが機能していません。理由はわかりませんが、機能していません。
スタック上の他の回答を確認しましたが、それらも機能していません。
EditText属性のいずれかが競合していないか、または何が問題なのかを確認してください。

編集:同じ問題が他の開発者によって直面されています
コメントを参照 ここ 同じ問題がMansiとaatによって直面されています
そして ここ コメントで同じ問題がVincyとRiserによって直面されています

編集:問題は解決しました
xmlの最大長をオーバーライドして機能しない入力フィルターを使用していました。
入力フィルターが機能しなかった理由は、以前のmaxLength入力フィルターを上書きする別の入力フィルターを使用していたためです。
それを単一の入力フィルターにすると、その問題が修正されました。

14
Salmaan

かなり古い投稿ですが、EditTextとは異なる方法で処理できるTextViewにフィルターを追加しているときに、XMLが実際のEditTextオブジェクトであることに気付きました。 InputFilterオブジェクトを手動で追加する場合、xmlプロパティは上書きされます。

InputFiltersをViewに追加するサンプルコードはTextViewオブジェクトのようです。フィルタを手動で追加する場合は、正しいビューをプルしてEditTextにキャストされていることを確認してください。現在は機能しています。

幸運を。

14
Armando

これを試してください。maxlenghtと入力フィルターの両方で機能します

month.setFilters(new InputFilter[]{new InputFilterMinMax("0", "12"), new InputFilter.LengthFilter(2)});
15
Surya V

エディットテキストにInputFilterを使用している場合、maxLengthは機能しません。

12
Tripaty Sahu

すでにInputFilterがある場合、maxLengthは機能しません。追加のInputFilterを作成し、それを追加する必要があります。

    // Filter for comma character
    String blockCharacterSet = ",";
    InputFilter filter = (source, start, end, dest, dstart, dend) -> {
        if (source != null && blockCharacterSet.contains(("" + source))) {
            return "";
        }
        return null;
    };

    // Filter for max Length
    InputFilter filter1 = new InputFilter.LengthFilter(20);

    // Set the filters
    et_list_name.setFilters(new InputFilter[] { filter, filter1 });
2
live-love

入力制限だけでなく文字制限も追加します。

   private String BlockCharacterSet_Name = "\\@$#!=><&^*+\"\'";   

 mFirstName.setFilters(new InputFilter[] {new InputFilter.LengthFilter(25),inputFilter_Name});



 private InputFilter inputFilter_Name = new InputFilter() { //filter input for name fields
        @Override
        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
            if (charSequence != null && BlockCharacterSet_Name.contains(("" + charSequence))) {
                return "";
            }
            return null;
        }
    };

{新しいInputFilter.LengthFilter(25)、inputFilter_Name}

同じInputFilterで最大長の制限と特殊文字の制限の両方を設定できるため、同じものに対して個別のInputfilterを作成する必要はありません。

0
Prajwal W

これを試して:

val existingFilters: Array<InputFilter> = editText.filters
editText.filters = existingFilters.apply { plus(filter) }

XMLを介して適用されるmaxLengthなどの既存のフィルターのリストを取得してから、さらにフィルターを追加する必要があります。あなたの場合、editTextのmaxLengthプロパティは、適用しようとしたカスタムInputFilterによってオーバーライドされました。

0
Amar Jain