¿Cuál es la mejor manera de limitar la longitud del texto de un EditText
en Android?
¿Hay alguna manera de hacer esto a través de xml?
android
android-edittext
maxlength
hpique
fuente
fuente
Respuestas:
Documentación
Ejemplo
fuente
maxLength
propiedad aún funciona.android:maxLength
es equivalente aInputFilter.LengthFilter
, por lo tanto, al cambiar programáticamente su filtro, también ha modificado su filtro XML.setFilters
dejarán deandroid:maxLength
funcionar, ya que sobrescribe el filtro establecido por el XML. En otras palabras, si configura algún filtro mediante programación, debe configurarlos todos mediante programación.use un filtro de entrada para limitar la longitud máxima de una vista de texto.
fuente
InputFilter
. Se anulaandroid:maxlength
en el archivo xml, por lo que debemos agregarlo deLengthFilter
esta manera.fuente
TextWatcher
.Una nota para las personas que ya están utilizando un filtro de entrada personalizado y que también desean limitar la longitud máxima:
Cuando asigna filtros de entrada en el código, todos los filtros de entrada establecidos previamente se borran, incluido un conjunto con
android:maxLength
. Descubrí esto al intentar usar un filtro de entrada personalizado para evitar el uso de algunos caracteres que no permitimos en un campo de contraseña. Después de configurar ese filtro con setFilters, ya no se observó maxLength. La solución fue establecer maxLength y mi filtro personalizado juntos mediante programación. Algo como esto:fuente
fuente
He tenido este problema y considero que nos falta una forma bien explicada de hacerlo mediante programación sin perder los filtros ya establecidos.
Establecer la longitud en XML:
Como la respuesta aceptada dice correctamente, si desea definir una longitud fija para un EditText que no cambiará más en el futuro, simplemente defina en su XML EditText:
Establecer la longitud mediante programación
Para establecer la longitud mediante programación, deberá establecerla a través de un
InputFilter
. Pero si crea un nuevo InputFilter y lo establece en elEditText
perderá todos los otros filtros ya definidos (por ejemplo, maxLines, inputType, etc.) que podría haber agregado a través de XML o programáticamente.Entonces esto es INCORRECTO :
Para evitar perder los filtros agregados previamente, necesita obtener esos filtros, agregar uno nuevo (maxLength en este caso) y volver a configurar los filtros de la
EditText
siguiente manera:Java
Sin embargo, Kotlin lo hizo más fácil para todos, también debe agregar el filtro a los ya existentes, pero puede lograrlo con un simple:
fuente
Para cualquiera que se pregunte cómo lograr esto, aquí está mi
EditText
clase extendidaEditTextNumeric
..setMaxLength(int)
- establece el número máximo de dígitos.setMaxValue(int)
- limitar el valor entero máximo.setMin(int)
- limitar el valor entero mínimo.getValue()
- obtener valor enteroEjemplo de uso:
Todos los demás métodos y atributos que se aplican a
EditText
, por supuesto, también funcionan.fuente
Debido a la observación de goto10, armé el siguiente código para protegerlo contra la pérdida de otros filtros al configurar la longitud máxima:
fuente
fuente
Xml
Java:
Kotlin:
fuente
Otra forma de lograr esto es agregando la siguiente definición al archivo XML:
Esto limitará la longitud máxima del
EditText
widget a 6 caracteres.fuente
Desde material.io , puede usar
TextInputEditText
combinado conTextInputLayout
:Puede configurar una contraseña EditText con dibujable:
O puede limitar la longitud del texto con / sin contador:
Dependencia:
fuente
XML
android:maxLength="10"
Programáticamente:
Nota: internamente, EditText y TextView analizan el valor de
android:maxLength
en XML y lo utilizanInputFilter.LengthFilter()
para aplicarlo.Ver: TextView.java # L1564
fuente
Esta es una clase EditText personalizada que permite que el filtro de longitud viva junto con otros filtros. Gracias a la respuesta de Tim Gallagher (abajo)
fuente
de manera simple en xml:
si necesita establecer 4 caracteres en xml edit-text, use esto
fuente
Esto funciona bien ...
android:maxLength="10"
esto aceptará solo
10
caracteres.fuente
Pruebe esto para Java mediante programación :
fuente
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
Había visto muchas buenas soluciones, pero me gustaría dar una solución que considero más completa y fácil de usar, que incluye:
1, longitud límite.
2, si ingresa más, devuelva la llamada para activar su brindis.
3, el cursor puede estar en el medio o la cola.
4, el usuario puede ingresar pegando una cadena.
5, siempre descarte la entrada de desbordamiento y mantenga el origen.
Lo que no pude hacer es que, si el usuario resalta una parte de la entrada actual e intenta pegar una cadena muy larga, no sé cómo restaurar el resaltado.
Por ejemplo, la longitud máxima se establece en 10, el usuario ingresa '12345678' y marca '345' como resaltado, e intenta pegar una cadena de '0000' que excederá la limitación.
Cuando intento usar edit_text.setSelection (start = 2, end = 4) para restaurar el estado del origen, el resultado es que simplemente inserta 2 espacios como '12 345 678 ', no el resaltado de origen. Me gustaría que alguien lo resuelva.
fuente
Puede usar
android:maxLength="10"
en EditText. (Aquí el límite es de hasta 10 caracteres)fuente
Kotlin:
ZTE Blade A520
Tiene un efecto extraño. Cuando escribe más de 10 símbolos (por ejemplo, 15),EditText
muestra los primeros 10, pero otros 5 no son visibles ni accesibles. Pero cuando elimina símbolos conBackspace
, primero elimina los 5 símbolos correctos y luego elimina los 10 restantes. Para superar este comportamiento, use una solución :o esto:
o esto, si quieres tener sugerencias:
fuente
de manera simple en xml:
para configurarlo mediante programación puede usar la siguiente función
fuente