Подтвердить что ты не робот

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

У кого-то есть хорошая идея?

Спасибо

4b9b3361

Ответ 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);