これは私の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入力フィルターを上書きする別の入力フィルターを使用していたためです。
それを単一の入力フィルターにすると、その問題が修正されました。
かなり古い投稿ですが、EditText
とは異なる方法で処理できるTextView
にフィルターを追加しているときに、XMLが実際のEditText
オブジェクトであることに気付きました。 InputFilter
オブジェクトを手動で追加する場合、xmlプロパティは上書きされます。
InputFilter
sをView
に追加するサンプルコードはTextView
オブジェクトのようです。フィルタを手動で追加する場合は、正しいビューをプルしてEditText
にキャストされていることを確認してください。現在は機能しています。
幸運を。
これを試してください。maxlenghtと入力フィルターの両方で機能します
month.setFilters(new InputFilter[]{new InputFilterMinMax("0", "12"), new InputFilter.LengthFilter(2)});
エディットテキストにInputFilterを使用している場合、maxLengthは機能しません。
すでに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 });
入力制限だけでなく文字制限も追加します。
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を作成する必要はありません。
これを試して:
val existingFilters: Array<InputFilter> = editText.filters
editText.filters = existingFilters.apply { plus(filter) }
XMLを介して適用されるmaxLengthなどの既存のフィルターのリストを取得してから、さらにフィルターを追加する必要があります。あなたの場合、editTextのmaxLengthプロパティは、適用しようとしたカスタムInputFilterによってオーバーライドされました。