2011-03-14 17 views
5

después de establecer el límite máximo de caracteres para un editText usando InputFilter.LengthFilter, ¿hay alguna manera de hacer que editText reaccione en onTextChanged después de que alcanza la cantidad máxima de caracteres? si no, ¿hay una manera simple de establecer un número máximo de caracteres en un editText y aún reaccionar en el evento onTextChanged? Graciasandroid editText max limit

Respuesta

12

En el propio XML para dar el siguiente EditarTexto Attrib,

android:maxLength="20" 

gracias.

+0

mi longitud máxima es variable ... depende de algunas variables, así que tengo que configurarlo desde el código. –

+2

luego pruebe este InputFilter [] FilterArray = new InputFilter [1]; FilterArray [0] = new InputFilter.LengthFilter (variable); editEntryView.setFilters (FilterArray); –

+0

esto es lo que he hecho, pero después de alcanzar el límite máximo, no puedo corregir el evento cuando el usuario quiere escribir –

0

Estaba pasando por el mismo problema y algunas investigaciones sobre SO me dieron esta solución. Gracias a @ njzk2 por la brillante solución. Publicarlo aquí para que otros puedan obtener la respuesta.

maxLength atributo en el EditText es en realidad un InputFilter, que puede escribir usted mismo y proporcionar desde el código.

Puede ver la implementación de InputFilter.LengthFilter, que básicamente devuelve null si no hay desbordamiento. (Ver link)

con una pequeña modificación a eso: crear una extensión para InputFilter.LengthFilter en el que se llama a super y compararlo con null para decidir si necesita mostrar una alerta.

editText.setInputFilters(new InputFilter[] { 
    new InputFilter.LengthFilter(max) { 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
      CharSequence res = super.filter(source, start, end, dest, dstart, dend); 
      if (res != null) { // Overflow 
        Toast.makeText(this,"OVERFLOW!",Toast.LENGTH_SHORT).show(); 

      } 
      return res; 
     } 
    } 
});