Android:: Установить максимальную длину EditText программно с помощью другого InputFilter
Я использую InputFilter таким образом, чтобы разрешить только альфа и числа
private InputFilter[] inputFilters = new InputFilter[] { new InputFilter()
{
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
for (int i = start; i < end; ++i)
{
if (!Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]*").matcher(String.valueOf(source.charAt(i))).matches())
{
return "";
}
}
return null;
}
} };
Но проблема в том, что значение "android: maxLength" в файле xml не работает с этим InputFilter
Мне кажется, мне нужен код в InputFilter, чтобы установить максимальную длину EditText
У кого-то есть хорошая идея?
Спасибо
Ответы
Ответ 1
Просто попробуйте этот путь
InputFilter
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; ++i)
{
if (!Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]*").matcher(String.valueOf(source.charAt(i))).matches())
{
return "";
}
}
return null;
}
};
Как применить
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText edt =(EditText)findViewById(R.id.edt) ;
edt.setFilters(new InputFilter[]{filter,new InputFilter.LengthFilter(10)});
}
Ответ 2
public void setEditTextMaxLength(int length) {
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(length);
edt_text.setFilters(filterArray);
}
Ответ 3
Простой One-Liner будет:
myEditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(10) });
//replace 10 with required length.
Ответ 4
Если мы хотим ограничить ввод символов в EditText, EditText
в формате XML дает нам android:maxLength
. Но в java-кодах вы можете задаться вопросом, почему нет функции setMaxLength (int length). Причина этого заключается в том, что, когда вы хотите ограничить EditText, чтобы принять определенное значение, вам необходимо отфильтровать их, и это будет вызвано setFilters. Чтобы наш EditText имел фиксированный размер, мы можем использовать следующий код.
EditText et = new EditText(this);
int maxLength = 3;
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(maxLength);
et.setFilters(FilterArray);
Ответ 5
Основываясь на @Deepak, я использовал следующее:
public void setEditTextMaxLength(final EditText editText, int length) {
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(length);
editText.setFilters(FilterArray);
}
Ответ 6
Вы можете использовать эту функцию очень легко:
public static void setEditTextMaxLength(EditText editText, int length) {
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(length);
editText.setFilters(FilterArray);
}
и используйте это в своей деятельности:
setEditTextMaxLength(edt_passcode, 5);