tamaƱo studio salto que numero mascara linea limitar length edittext caracteres ancho android android-edittext input-filter

studio - salto de linea edittext android



La propiedad EditText maxLength no se aplica correctamente cuando se usa setFilters (4)

Cuando uso el método setFilter en un EditText para manejar caracteres especiales, la propiedad maxLength no funciona como se esperaba. Mi código está abajo.

editName = (EditText)findViewById(R.id.rna_editTextName); editName.setFilters(new InputFilter[]{getFilteredChars()}); //Below method returns filtered characters. public InputFilter getFilteredChars() { InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (end > start) { char[] acceptedChars = new char[]{''a'', ''b'', ''c'', ''d'', ''e'', ''f'', ''g'', ''h'', ''i'', ''j'', ''k'', ''l'', ''m'', ''n'', ''o'', ''p'', ''q'', ''r'', ''s'', ''t'', ''u'', ''v'', ''w'', ''x'', ''y'', ''z'', ''A'', ''B'', ''C'', ''D'', ''E'', ''F'', ''G'', ''H'', ''I'', ''J'', ''K'', ''L'', ''M'', ''N'', ''O'', ''P'', ''Q'', ''R'', ''S'', ''T'', ''U'', ''V'', ''W'', ''X'', ''Y'', ''Z'', '' '' ,''.'', ''/'''}; for (int index = start; index < end; index++) { if (!new String(acceptedChars).contains(String.valueOf(source.charAt(index)))) { return ""; } } } return null; } }; return filter; }


Esto se debe a que la propiedad maxLength establece un InputFilter en su EditText . Al llamar a EditText.setFilters(new InputFilter[] {<YOUR_FILTER>}) está anulando todos los InputFilters existentes, incluido el utilizado por maxLength .

Para solucionar esto, copie la matriz devuelta por EditText.getFilters() y agregue la suya propia:

InputFilter[] editFilters = edit.getFilters(); InputFilter[] newFilters = new InputFilter[editFilters.length + 1]; System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length); newFilters[editFilters.length] = <YOUR_FILTER>; edit.setFilters(newFilters);


mientras establece la propiedad maxlenth de edittext programáticamente

por favor muéstrese use el código.

Wild Guess: el problema puede ser que establezca maxLength en el diseño. Al llamar a setFilters (), este comportamiento se reemplaza por el de su filtro.

Solución: utilice más de un filtro o implemente el comportamiento maxLenght en su filtro getFilteredChars ().

EDITAR: es posible que desee ver http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html

y para su pregunta en el comentario, del doc:

when the buffer is going to replace the range dstart … dend of dest with the new text from the range start … end of source

Entonces, algo así como (Pseudo code liveCoding):

dest.lenght - (dend-dstart) + (end-start) = new legnth


Prueba este código Basado en @Jozua respuesta

/** * Adds filter to EditText preserving other filters. * * @param editText * @param filter */ public static void setFilter(EditText editText, InputFilter filter) { InputFilter curFilters[] = editText.getFilters(); if (curFilters != null) { InputFilter newFilters[] = new InputFilter[curFilters.length + 1]; System.arraycopy(curFilters, 0, newFilters, 0, curFilters.length); newFilters[curFilters.length] = filter; editText.setFilters(newFilters); } else { editText.setFilters(new InputFilter[] { filter }); } }


Puede agregar múltiples filtros en la matriz. Como el límite de caracteres máximo y el filtro de caracteres especiales en tu editText.

editText.setFilters (nuevo InputFilter [] {new InputFilter.LengthFilter (MAX_CHARACTER_LIMIT), SpecialCharacterInputFilter});