TextView de Android con HTML añadido URL no funciona.
Estoy desarrollando una aplicación en Java con targetSdkVersion establecido en 30. Tengo una actividad en la que necesito mostrar a un usuario una URL clickable en forma de click me con la URL larga oculta dentro de etiquetas HTML de soporte.
He estado luchando por algún tiempo. Actualmente, mi código funciona de la siguiente manera:
if (station.getSponsorUrl().length() > 32) {
stationSponsorUrl.setClickable(true);
stationSponsorUrl.setMovementMethod(LinkMovementMethod.getInstance());
stationSponsorUrl.setText(Html.fromHtml("<a href=\"" + station.getSponsorUrl() +"\">" + getString(R.string.www_link) + "</a>\n", HtmlCompat.FROM_HTML_MODE_LEGACY));
}
else {
stationSponsorUrl.setText(station.getSponsorUrl());
}
Cuando quito la llamada a setMovementMethod
, la URL se muestra correctamente (color de fuente), pero no se puede hacer clic en ella. Cuando dejo setMovementMethod
activo, ni siquiera se muestra como una URL. Veo el texto definido por R.string.www_link
en el formato sin cambios. Por supuesto, tampoco funciona.
El caso else
funciona correctamente y cuando establezco el contenido del TextView con un enlace HTML plano, funciona de inmediato. La tv está definida en el diseño XML de la siguiente manera:
<TextView
android:id="@+id/textViewSponsorUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:autoLink="all"
android:fontFamily="@font/alegreya_sans_sc_medium"
android:linksClickable="true"
android:text="TextView"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
davy.ai
Para mostrar una URL clicable con la URL larga oculta dentro de HTML de soporte, se pueden seguir los siguientes pasos:
En el código anterior, la URL larga está oculta dentro de la etiqueta de ancla HTML. El método
Html.fromHtml()
se utiliza para convertir el código HTML en texto mostrable. El métodosetClickable()
se utiliza para hacer que la URL sea clicable, y el métodosetMovementMethod()
se utiliza para especificar el tipo de interacción que se utiliza cuando se hace clic en el texto (en este caso, se utiliza un método de movimiento de enlace).