texto studio solo propiedades plain obtener numero mostrar limitar letras eventos edittext datos caracteres android listener android-edittext onchange

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 el count 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 el editable en afterTextChanged 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 que count en beforeTextChanged .
  • count : esta es la longitud del texto que se insertó. Este es el mismo valor que after en beforeTextChanged .

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 del EditText . 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()