Android EditText maxLength permite al usuario escribir más

Ya he establecido el atributo maxLength para un widget EditText en el archivo de diseño xml, y limita la visualización de caracteres.

Pero todavía permite al usuario presionar más letras en el teclado, y el retroceso elimina estas prensas extra en lugar de la última letra en la pantalla.

Creo que esto no es como se supone que es. Al pulsar las teclas después de que se haya alcanzado el límite, debe dejar de aceptar más entradas aunque no se visualice.

¿Alguna solución en esto?

Actualizar

Basado en la respuesta a continuación, para multilínea EditText, agregue el atributo textMultiLine también.

android:inputType="textFilter|textMultiLine" 

  1. Deshabilitar auto-sugerencias ( android:inputType="textFilter" o textNoSuggestions ):
  2. Establecer maxLength

     <EditText android:id="@+id/editText" android:inputType="textFilter" android:maxLength="8" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Espero que ayude

Lamentablemente la siguiente respuesta no funciona. Sin embargo, nos ayudó a averiguar que el error mencionado por Poly Bug no es reproducible si la entrada comienza con un número.


Puede utilizar un TextWatcher para escuchar los cambios de EditText y evitar que el usuario escriba demasiados caracteres en el campo. El siguiente código funciona para mí:

 final int maxLength = 10; EditText editText = (EditText) findViewById(R.id.my_edittext_id); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { if (s.length() >= maxLength) s.delete(maxLength, s.length()); } }); 

En afterTextChanged , el código compara la longitud del texto insertado con la longitud máxima maxLength y elimina todos los caracteres superfluos.


Puede reemplazar todas las clases estándar de EditText con la siguiente clase para usar el listener junto con el maxLength XML maxLength :

 public class MyMaxLengthEditText extends EditText { public static final String XML_NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android"; private final int mMaxLength; public MyMaxLengthEditText(Context context) { super(context, null); mMaxLength = -1; } public MyMaxLengthEditText(Context context, AttributeSet attrs) { super(context, attrs); mMaxLength = attrs.getAttributeIntValue(XML_NAMESPACE_ANDROID, "maxLength", -1); addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { if (s.length() >= mMaxLength) s.delete(mMaxLength, s.length()); } }); } } 

Puede utilizar InputFilter

Los InputFilters se pueden conectar a Editables para restringir los cambios que se pueden hacer a ellos.

Xml

  <EditText android:id="@+id/edit_Text" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Clase Java

 int maxLengthofYourEditText = 5; // Set Your Limit edit_TextObj.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLengthofYourEditText)}); 
  • Atributo de configuración del elemento hijo del diseño incluido
  • Restablecimiento del valor del widget de búsqueda (SearchView)
  • Android Studio: EditText editable es obsoleto Cómo utilizar inputType
  • Android getMeasuredHeight devuelve valores erróneos!
  • Cómo capturar los cambios de tamaño de widget en dispositivos donde onAppWidgetOptionsChanged no se llama?
  • ImageView dentro de RelativeLayout tiene relleno superior e inferior
  • Cómo mostrar una columna de dos columnas ListView en Android?
  • android TextView.setText no funciona en widget simple
  • SetContentView (R.layout.Main); Main no se puede resolver o no es un campo
  • Android.database.sqlite.SQLiteCursor@435b9ba0
  • SetTextViewText no actualizar widget
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.