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.

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" />
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar una URL clicable con la URL larga oculta dentro de HTML de soporte, se pueden seguir los siguientes pasos:

    1. Define el TextView 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:fontfamily="@font/alegreya_sans_sc_medium" android:text="TextView" android:textsize="18sp"></textview>
    
    1. En el código Java, utiliza el siguiente código para establecer el texto del TextView con la URL clicable:
    if (station.getSponsorUrl().length() > 32) {
        String htmlLink = "<a href='" + station.getSponsorUrl() + "'>haz clic aquí</a>";
        stationSponsorUrl.setText(Html.fromHtml(htmlLink, HtmlCompat.FROM_HTML_MODE_LEGACY));
        stationSponsorUrl.setClickable(true);
        stationSponsorUrl.setMovementMethod(LinkMovementMethod.getInstance());
    } else {
        stationSponsorUrl.setText(station.getSponsorUrl());
    }
    

    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étodo setClickable() se utiliza para hacer que la URL sea clicable, y el método setMovementMethod() 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).

Comments are closed.