Cómo integrar enlaces en un TextView Android Kotlin


Si queremo añadir enalces como contenido en un TextView, se puede hacer de varias maneras.

Usando autoLink

El componente TextView puede detectar automáticamente un enlace dentro del contenido usando la prpiedad android:autoLink, para que sea clickeable y lleve a su destino de forma automática, los tipos de enlace que permite son los siguientes:

  • all: crea vínculos para todo tipo de enlace, el correo electrónico, mapa, el teléfono y el texto web.
  • email: crea el vínculo para los enlaces tipo email.
  • map: crea el vínculo para los enlaces tipo map.
  • none: sin ningún vínculo de enlace (por defecto).
  • phone: crea el vínculo para los enlaces tipo telefono.
  • web: crea el vínculo para los enlaces tipo web.

Ejemplo:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:autoLink="all"
        android:text="Welcome to https://dev4phones.wordpress.com/." />

Formateando el conido como HTML

El componente TextView puede renderizar de forma muy básica algunas etiquetas HTML, una de ellas es el elemento web para crear enlaces <a>

Para formatear el contenido HTML se puede usar la siguiente extensión Kotlin

fun String?.toHtml(): Spanned? {
    if (this.isNullOrEmpty()) return null
    return HtmlCompat.fromHtml(this, HtmlCompat.FROM_HTML_MODE_COMPACT)
}

El contenido html se debe encapsular dentro de un string en formato

<![CDATA[ contenido HTML ]]>

Luego solo se debe activar la funcionalidad en el TextView para que detecte los enlaces web, se hace con movementMethod

Ejemplo

<string name="text_sample2"><![CDATA[By, continuing, you agree to the <a href="https://google.com">Terms of service</a> and <a href="https://bing.com">Privacy policy</a>.]]></string>

binding.tvSample2.apply {
    text = getString(R.string.text_sample2).toHtml()
    movementMethod = LinkMovementMethod.getInstance()
}


Usando Linkify

Con Linkify.addLinks se puede transformar el contenido plano y resaltar los vinculos que incluye

binding.tvSample3.text ="Una URL es www.google.com telefono +34678567876 otra url twitter.com "
Linkify.addLinks(binding.tvSample3,Linkify.ALL)
Anuncio publicitario

Publicado por Codelaby

Mobile DevDesigner

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: