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.
- Restaurar el estado del widget de vista de búsqueda de android
- Android: Diálogo de alerta con cuadro de diálogo personalizado y botón neutral
- ¿Cómo especificar el espaciado entre elementos de LinearLayout sólo una vez?
- Crear widget en la instalación de la aplicación
- Deshabilitar el método de entrada de EditText pero mantener el cursor parpadeando
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"
- Efecto de ondulación de Android 5+ remoteviews
- Diferentes tamaños de Drawable cuando se carga como fondo de / drawable-hdpi en lugar de / drawable
- Implementar android: button = "@ drawable / checkbox" por programa
- Efecto extraño con ImageView startAnimation en ListView
- ¿Puede un widget de casa tener un Contexto?
- Obtenga la intención de onCreate en Android
- Widget No aparece después del reinicio del teléfono
- Cómo cambiar el teclado de función de Android Tecla "Ir" a "Siguiente"
- Deshabilitar auto-sugerencias (
android:inputType="textFilter"
otextNoSuggestions
): -
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)});
- Mostrar mensajes de registro en la pantalla para la aplicación de Android
- MediaPlayer.seekTo () no funciona para la posición sin búfer