2010-11-29 15 views
37

Esto parece un problema trivial, pero me tiene un poco perplejo. Quiero cargar una cadena HTML usando Html.fromHtml(), y tengo cualquier enlace en la cadena para hacer clic y abrir en el navegador.¿Cómo puedo hacer enlaces desdeHTML clickeable? (Android)

Ejemplo básico:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 

Con este fragmento, el texto está formateado como si se tratara de un enlace (azul, subrayado), pero no es hacer clic. Probé Linkify, pero parece que solo funciona con enlaces que no están basados ​​en HTML.

¿Alguna sugerencia?

Respuesta

113

Como asumí, la solución era trivial:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 

La segunda línea de alguna manera activa el comportamiento de enlace, aunque no estoy muy seguro de cómo. La misma pregunta se trata en Google Code.

+1

Nota Probé esto al hacer referencia a un recurso String.xml. esto no funciona :-) – Blundell

+2

Utilice CDATA para strings.xml para evitar que los enlaces se traten en subetiquetas. –

+1

No funciona en 4.0 no estoy seguro acerca de las versiones anteriores :( – schwiz

3

Debe ser de esta manera:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 
textView.setAutoLinkMask(Linkify.WEB_URLS); 
textView.setLinksClickable(true); 

en XML debe ser

<TextView 
    android:id="@+id/txtview" 
    android:autoLink="web" 
    android:linksClickable="true" 
    /> 
+3

No puedo conseguir que esta solución funcione. ¿Lo has probado? Parece tener el mismo problema de solo vincular enlaces "visibles", no anclas con un texto diferente. –

+0

autoLink hace que nuestra aplicación falle en algunos usuarios (pero nosotros una base de usuarios de 20 millones, por lo que hace una diferencia) –

5

el Javadoc de la LinkMovementMethod dice que

Soporta clic en los vínculos con el Centro DPAD o Entrar.

Así que tiene sentido que funcione de esa manera.

y confirmó, con obras como 4.2.2 encanto con sólo el

textView.setMovementMethod(LinkMovementMethod.getInstance()); 
15

Como se ha mencionado en otras respuestas, un camino a seguir es utilizar:

xtView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 

Sin embargo, esto no lo hará funciona si tienes ANY android: valor de autoLink establecido, no solo 'web' como parecen sugerir otros comentarios. Eso significa que puede usar esta solución para vincular las URL a expensas de tener que deshabilitar/desvincular el teléfono, el correo electrónico y los mapas.

+0

Esta es la respuesta correcta para las situaciones en las que está utilizando Html.fromHtml(). Encuentra la respuesta seleccionada. – wblaschko

0
String data="MyTest"; 

textView.setText(data); 
textView.setText(Html.fromHtml(data)); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 
textView.setLinksClickable(true); 
+1

Debe editar esto para incluir que tener el atributo android: autoLink establecido en cualquier cosa anulará el método de movimiento – Zach

Cuestiones relacionadas