En mi proyecto tengo un EditText
. Quiero contar los caracteres en el EditText
y mostrar ese número en a TextView
. He escrito el siguiente código y funciona bien. Sin embargo, mi problema es que cuando hago clic Backspacecuenta, pero necesito disminuir el número. ¿Cómo puedo considerarlo Backspace?
tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
i++;
tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Respuestas:
Utilizar
Lo siguiente se sugirió una vez en una de las respuestas, pero es muy ineficiente
fuente
¿qué tal simplemente obtener la longitud de char en su EditText y mostrarlo?
algo en la línea de
fuente
textMessage.length()
, sin necesidad de hacerlogetText().toString()
. developer.android.com/reference/android/widget/…Unos pocos cambios en su código:
fuente
Esta es una respuesta un poco más general con más explicaciones para futuros espectadores.
Agregar un oyente cambiado de texto
Si desea encontrar la longitud del texto o hacer otra cosa después de que se haya cambiado el texto, puede agregar un oyente con texto modificado a su texto de edición.
El oyente necesita una
TextWatcher
, que requiere tres métodos para ser anulado:beforeTextChanged
,onTextChanged
, yafterTextChanged
.Contando los personajes
Puedes hacer que el personaje cuente en
onTextChanged
obeforeTextChanged
cono
afterTextChanged
conSignificado de los métodos
Los parámetros son un poco confusos, así que aquí hay una pequeña explicación adicional.
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence
: Este es el contenido del texto antes de que se realice el cambio pendiente. No deberías intentar cambiarlo.start
: Este es el índice de dónde se insertará el nuevo texto. Si se selecciona un rango, entonces es el índice inicial del rango.count
: Esta es la longitud del texto seleccionado que se va a reemplazar. Si no se selecciona nada,count
lo será0
.after
: esta es la longitud del texto a insertar.onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
: Este es el contenido del texto después de que se realizó el cambio. No debe intentar modificar este valor aquí. Modifique eleditable
inafterTextChanged
si es necesario.start
: Este es el índice del inicio de dónde se insertó el nuevo texto.before
: Este es el viejo valor. Es la longitud del texto previamente seleccionado que fue reemplazado. Este es el mismo valor quecount
enbeforeTextChanged
.count
: Esta es la longitud del texto que se insertó. Este es el mismo valor queafter
enbeforeTextChanged
.afterTextChanged
afterTextChanged(Editable editable)
Al igual
onTextChanged
, esto se llama después de que el cambio ya se haya realizado. Sin embargo, ahora el texto puede ser modificado.editable
: Este es el texto editable deEditText
. Sin embargo, si lo cambia, debe tener cuidado de no entrar en un bucle infinito. Consulte la documentación para más detalles.Imagen suplementaria de esta respuesta
fuente
TextWatcher maritalStatusTextWatcher = new TextWatcher () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {
fuente