Permitir sólo 1 carácter en EditText y siempre sobrescribir cuando el usuario de entrada

Necesito hacer un EditText que aceptaría solamente un carácter y un solo carácter (letra / alfa). Y si el usuario introduce otro carácter, debe reemplazar uno existente (como método de sobrescritura de entrada de texto con 1 símbolo permitido).

  1. Sé cómo establecer la longitud máxima del texto en las propiedades. Pero si lo pongo en 1, entonces ningún otro carácter podría insertarse antes de que el usuario elimine uno existente. Pero quiero reemplazar el carácter existente con ese nuevo introducido automáticamente sin eliminación manual. ¿Como hacer eso?

  2. Sé fijar la propiedad para permitir solamente dígitos en un EditText , pero no puedo imaginar cómo permitir solamente los caracteres. Así que la segunda pregunta es cómo permitir que sólo los personajes en EditText ?

Actualmente estoy usando un EditText con el tamaño máximo del texto = 2 con el código siguiente:

 final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter); editLetter.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { if (s!=null && s.length()>1){ editLetter.setText(s.subSequence(1, s.length())); editLetter.setSelection(1); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } }); 

El punto es, cuando un usuario introduce un segundo char, el primero debe ser eliminado. Hacer el tamaño de texto a 2 permite al usuario ingresar otro carácter después de que ya haya sido ingresado.

Realmente no entiendo cómo funciona, pero lo hace :). Y además tuve que apuntar el cursor en EditText a la última posición porque siempre va al principio que hace que no pueda entrar nada en absoluto. No entiendo por qué es que tampoco.

El punto principal de esta solución es que tiene un 2-chars tamaño EditText , pero quiero que 1-char tamaño. Y permite introducir cualquier cosa aparte de las letras (chars / alpha) y no quiero nada más que chars.

Utilizando el consejo proporcionado por sgarman y la función Character.isLetter() , el método afterTextChanged se ve así:

 public void afterTextChanged(Editable s) { int iLen=s.length(); if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){ s.delete(iLen-1, iLen); return; } if (iLen>1){ s.delete(0, 1); } } 

He descubierto que usar Selection.setSelection no es necesario en este caso. Ahora tiene un filtro que permite la entrada de letras solamente. Es casi la respuesta que quiero. La única cosa que queda es cómo hacer lo mismo con el tamaño de un símbolo EditText ?

Tratar:

 s.delete(0, 1); Selection.setSelection(s, s.length()); 

Usted puede agregar esta sola línea a su archivo xml de la disposición, y androide hará las cosas para usted

 android:maxLength="1" 

Seguro que deberías añadirlo como una propiedad a la editText elemet, por ejemplo

 <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="text" android:maxLength="1" > 

Me enfrenté al mismo problema y encontré que esta solución más fácil, sé que es una vieja pregunta, pero decidí poner mi respuesta para que sea más fácil para aquellos que abran este enlace.

Y no debo olvidar de agradecer al dueño de este blog , que de cito la respuesta!

Quería hacer lo mismo y usé tu código en afterTextChanged (Editable s) y también establecí un filtro en el editText como este.

 editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)}); 

Funcionó como queríamos.

  • ¿Cómo puedo hacer algo, 0.5 segundo después de que el texto cambió en mi EditText?
  • EditText no se actualiza después de que se cambió el texto en TextWatcher
  • TextWatcher.afterTextChanged tiene cadena incorrecta después de retroceso
  • Cómo cambiar TextView texto en DataChange sin llamada atrás TextWatcher Listener
  • Eventos de TextWatcher se están llamando dos veces
  • Detectar si el contenido de EditText fue modificado por el usuario o por programa?
  • Detectar cambios en EditText (TextWatcher ineficaz)
  • Cómo limitar el texto en números sólo de 0-59 en Editar texto en Android?
  • Cómo manejar la tecla Intro usando TextWatcher en Android
  • TextWatcher para más de un EditText
  • Cómo dar formato a la entrada de EditText al escribir con separadores de miles (,) en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.