Texto enriquecido de TextView

Es más común usar texto enriquecido en el proyecto. Una línea muestra texto en múltiples estilos y colores. El texto enriquecido ClickableSpan se utiliza para realizar la diversificación y personalización del color, tamaño, color de fondo y otros atributos del texto en el mismo TextView.

También podemos usar Html.fromHtml (string) para escribir en formato de texto, debemos prestar atención a :
1. Cuando la cadena es demasiado grande, arrojará IOException
2.Html.fromHtml (string) reemplazará '\ r' y '\ n' en la cadena con espacios, por lo que debemos reemplazarlo explícitamente con '<br>' reconocible por html; de lo contrario, informará IOException
3. Android Native solo admite algunas etiquetas html
 

Problemas encontrados al usar ClickableSpan :

Use ClickableSpan para configurar el evento de respuesta al texto en TextView, y luego configure el evento de respuesta a TextView. Cuando haga clic en ClickableSpan, se activarán dos eventos al mismo tiempo.
Casos comunes: comentario de respuesta, haga clic en el texto, aparece un cuadro de diálogo, haga clic en el apodo, ingrese a la página de inicio del usuario (círculo de amigos comentario comentario)
Razón:
1. Verifique el código fuente para saber que para TextView setMovementMethod, el método onTouchEvent de LinkMovementMethod también activará su propio evento onClick y volverá a la vista para su procesamiento. En este momento, TextView también consume el evento, por lo que activará 2 eventos.
2. Método TextView setMovementMethod, los siguientes tres métodos se establecen en verdadero de forma predeterminada, de acuerdo con el mecanismo de distribución de eventos de Android, TextView también consumirá el evento.
setFocusable (verdadero); setClickable (verdadero); setLongClickable (verdadero);

Cómo resolver:

En el ejemplo anterior, podemos deshabilitar el evento de clic de TextView. Cuando se hace clic en el texto, se entrega a la clase principal para su procesamiento. Haga clic en el apodo y ClickableSpan para ingresar a la página de inicio del usuario
1.  Vuelva a escribir LinkMovementMethod para devolver onTouchEvent como falso.
2. TextView no es cliqueable.
setFocusable (falso);
setClickable(false);
setLongClickable(false);
 
 
Código en cuestión :

 

 Haga clic en ClickableSpan, salida de registro:

 

Código modificado :

ClickableMovementMethod modificación:

class ClickableMovementMethod: LinkMovementMethod () { 

    objeto complementario { 
        val mInstance by lazy (LazyThreadSafetyMode.NONE) { 
            ClickableMovementMethod () 
        } 

    } 

    anula la diversión onTouchEvent (widget: TextView, buffer: Spannable, event: MotionEvent): Boolean { 
        val action = event.action 

        if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { 
            var x = event.x.toInt () 
            var y = event.y.toInt () 

            x - = widget.totalPaddingLeft 
            y - =widget.totalPaddingTop 

            x + = widget.scrollX 
            y + = widget.scrollY 

            val layout = widget.layout 
            val line = layout.getLineForVertical (y) 
            val off = layout.getOffsetForHorizontal (line, x.toFloat ()) 

            val links = buffer. getSpans (off, off, ClickableSpan :: class .java) 

            if (links.size! = 0 ) { 
                val link = links [0 ]
                 if (action == MotionEvent.ACTION_UP) { 
                    link.onClick (widget)
                } else  if (action == MotionEvent.ACTION_DOWN) { 

                    Selection.setSelection ( 
                        buffer, 
                        buffer.getSpanStart (link), 
                        buffer.getSpanEnd (link) 
                    ) 
                } 
                return  true 
            } else { 
                Selection.removeSelection (buffer) 
            } 
        } 
        return  false 
    } 


}
Ver código
 
Salida de registro:
 Haga clic en ClickableSpan:

Haga clic en el texto:

 

 

Enlace de referencia:

Supongo que te gusta

Origin www.cnblogs.com/fangg/p/12752623.html
Recomendado
Clasificación