android - studio - Contando caracteres en el oyente modificado de EditText
plain text android studio (4)
¿Qué tal solo obtener la longitud de char en tu EditText y mostrarlo?
algo en la linea de
tv.setText(s.length() + " / " + String.valueOf(charCounts));
En mi proyecto tengo un EditText
. Quiero contar los caracteres en el texto de EditText
y mostrar ese número en un TextView
. He escrito el siguiente código y funciona bien. Sin embargo, mi problema es que cuando hago clic en Retroceso , cuenta, pero necesito disminuir el número. ¿Cómo puedo considerar Retroceso ?
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){}
});
Esta es una respuesta un poco más general con más explicaciones para futuros espectadores.
Añadir un oyente de texto cambiado
Si desea buscar la longitud del texto o hacer otra cosa después de que se haya cambiado el texto, puede agregar un escucha de texto modificado a su texto de edición.
EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
El oyente necesita un TextWatcher
, que requiere que se sobrescriban tres métodos: beforeTextChanged
, onTextChanged
y afterTextChanged
.
Contando los personajes
Puede obtener el recuento de caracteres en onTextChanged
o antes de beforeTextChanged
con
charSequence.length()
o en afterTextChanged
con
editable.length()
Significado de los métodos.
Los parámetros son un poco confusos, así que aquí hay una pequeña explicación adicional.
antesTextChanged
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 debes tratar de cambiarlo. -
start
: este es el índice donde 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, entonces elcount
será0
. -
after
: esta es la longitud del texto a insertar.
enTextChanged
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 deberías intentar modificar este valor aquí. Modifique eleditable
enafterTextChanged
si es necesario. -
start
: este es el índice del inicio donde se insertó el nuevo texto. -
before
: Este es el valor antiguo. Es la longitud del texto seleccionado previamente 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 que onTextChanged
, esto se llama después de que el cambio ya se ha realizado. Sin embargo, ahora el texto puede ser modificado.
-
editable
: Este es el texto editable delEditText
. Sin embargo, si lo cambias, debes tener cuidado de no entrar en un bucle infinito. Consulte la documentation para más detalles.
Imagen suplementaria de esta respuesta.
Poco cambio en tu código:
TextView tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
tv.setText(String.valueOf(s.toString().length()));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Utilizar
s.length()
Lo siguiente fue sugerido una vez en una de las respuestas, pero es muy ineficiente.
textMessage.getText().toString().length()