es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Android EditText, cambiar color y estilo mientras se escribe.

Estoy creando un editor avanzado de Android que permite al usuario cambiar el color del texto y los estilos (negrita, cursiva, subrayado) mientras escribe.

Puedo lograr los estilos utilizando SpannableStringBuilder, pero parece que SpannableStringBuilder solo se puede aplicar a caracteres existentes (como resaltándolos y cambiando el color).

¿Cómo puedo lograr el mismo efecto cuando el usuario escribe nuevos caracteres sin basarse en el texto existente?

Por ejemplo, si elijo el color de texto amarillo y el subrayado en mis controles, cuando el usuario escriba nuevos caracteres, estos caracteres estarán subrayados y serán amarillos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes usar un TextWatcher en tu EditText. Dentro del TextWatcher, puedes actualizar el SpannableStringBuilder con el estilo actual cada vez que se añaden nuevos caracteres.

    Primero, crea un objeto SpannableStringBuilder y establece el texto de tu EditText en este objeto.

    SpannableStringBuilder builder = new SpannableStringBuilder();
    editText.setText(builder);
    

    A continuación, establece un TextWatcher en el EditText. El TextWatcher tiene tres métodos: beforeTextChanged, onTextChanged y afterTextChanged. Usaremos el método onTextChanged para aplicar el estilo a los nuevos caracteres.

    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) {
            builder.setSpan(new ForegroundColorSpan(Color.YELLOW), start, start + count, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            builder.setSpan(new UnderlineSpan(), start, start + count, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            builder.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), start, start + count, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            editText.setText(builder);
            editText.setSelection(start + count); // mantener el cursor al final del nuevo texto
        }
    
        @Override
        public void afterTextChanged(Editable s) {
    
        }
    });
    

    En el método onTextChanged, aplicamos el estilo actual a los nuevos caracteres estableciendo spans en el objeto builder. Establecemos un ForegroundColorSpan con el color elegido, un UnderlineSpan y un StyleSpan con estilos negrita e itálica.

    Después de eso, establecemos el builder como el texto del EditText y movemos el cursor al final del nuevo texto.

    Con esta configuración, el usuario puede escribir nuevos caracteres con el estilo elegido aplicado en tiempo real.

Comments are closed.