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)