Hacer una vista de texto de hipervínculo en Android


80

Quiero crear un vínculo para un texto de vista de texto como Google . ¿Hay alguna forma de hacer un enlace como este? (es decir) Al hacer clic en la palabra Google, debería abrir el enlace correspondiente. Cualquier idea es bienvenida.




1
simplemente use Linkify.addLinks (TextView, Linkify.ALL);
AndroidGeek

Respuestas:


135

Prueba esto y cuéntame qué sucedió.

Usando código java:

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

Desde el nivel de API> = 24 en adelante Html.fromHtml(String source)está obsoleto en su lugar fromHtml(String, int), use ,

textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));

O en el archivo XML de diseño, dentro de los atributos del widget TextView

android:autoLink="web"
android:linksClickable="true"

obtuve el resultado esperado. Gracias por tu respuesta
Srinivas

1
Si el texto del hipervínculo está presente en strings.xml, ninguna de las respuestas sugeridas funciona. Funciona de una manera muy extraña. Si configuro el texto directamente en el diseño xml, funciona, pero cuando configuro los datos de la vista de texto en el código Java, no funciona.
Velu

2
Solo para mencionar que si usa el código Java, debe eliminarlo android:autoLink="web"de XML. Tenía ambos y no funcionó.
Αntonis Papadakis

53

utilizar android:autoLink="web"en el xml de su TextView. Debería convertir automáticamente las URL en las que se puede hacer clic (si se encuentran en el texto)


14
También incluye android: linksClickable = "true"
Ajith Memana

@waqaslam en este caso donde ponemos un enlace.
Garg's

1
@ Garg's Es el texto que estableces en la vista de texto que puede contener hipervínculos
waqaslam

28

Todo probado y funcionando al 100%
Solución: a android:autoLink="web"
continuación se

muestra un ejemplo completo de diseño de muestra XML

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

Cadena en string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>

3
No funciona si cambio esta línea> cleverfinger.com.au/user-guide/ </a> </ string > para un texto diferente como: Haga clic aquí
Musculaa

2
esto funciona solo si el texto contiene una URL completa como: www.something.com
Rahul Tiwari

7

Esto también se puede hacer usando la propiedad predeterminada de Textview

android:autoLink="email"

5

Nota: - Html.fromHtml está obsoleto en Android N

Necesita verificar y soporte Android Ny versiones superiores de Android

                  //Set clickable true
                 tagHeading.setClickable(true);
                 
                  //Handlle click event
                  tagHeading.setMovementMethod(LinkMovementMethod.getInstance());

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
                } else {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
                }
 

Alternativamente

No puede querer agregar mediante programación la marca autoLink en TextView.

android: autoLink = "web"

android: linksClickable = "true"

De esta manera no es necesario agregar <a href='somelink'>etiquetas.

Lo cual es una desventaja, si desea agregar hyperlinkun, textno puede hacerlo de esta manera. por ejemplo, no puedes hacer algo como esto: - [ hiteshsahu ] [1]

           <TextView
                android:id="@+id/tag_info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tag_ll"
                android:layout_gravity="left"
                android:layout_margin="10dp"
                android:autoLink="web"
                android:linksClickable="true"
                android:text="https://github.com/hiteshsahu"
                android:textColor="@color/secondary_text" />

El resultado de ambos enfoques: -

https://github.com/hiteshsahu


1

Para la última versión de SDK fromHtmlestá en desuso Use debajo de la línea

String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
    if (Build.VERSION.SDK_INT >= 24) {
        textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
    } else {
        textView.setText(Html.fromHtml(yourtext));
    }

0

He creado una función de extensión siguiente de una vista de texto.

@SuppressLint("SetTextI18n")
fun TextView.makeHyperLink(url: String) {
    text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml("<a href='${url}'>${text}</a>", Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml("<a href='${url}'>${text}</a>")
    }
    movementMethod = LinkMovementMethod.getInstance()
    isClickable = true
}

y llamándolo así

tvTos.makeHyperLink(tos_url)

También puede pasar texto como parámetro.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.