how - textview link android studio
Enlaces en TextView (9)
Necesito poner un enlace en un TextView
, tengo una cadena que contiene la etiqueta <a href="link">Text for link</a>
y algún otro texto. El problema es que si ejecuto el proyecto puedo ver el texto pero no se puede hacer clic. Intenté con la etiqueta <b>
también para ver si funciona y parece que tampoco funciona.
¿Cómo puedo hacer que esto funcione sin el uso de Linkify
?
Conseguir que los enlaces funcionen desde html es algo complicado:
Aplique su texto a través de xml
android:text="@string/…
o a través desetText()
(ver otras respuestas)Use
textView.setMovementMethod(LinkMovementMethod.getInstance())
para hacer clic en los enlaces (ver otras respuestas)NO agregue
android:autoLink="web"
a su recurso XML (secciónTextView
), de lo contrario, las etiquetas A no se representan correctamente y ya no se puede hacer clic en ellas.
Observación 1:
El OnClickListener
puede ser útil, si su TextView
contiene solo un enlace y desea activar la navegación incluso si el usuario hace clic a un lado de su enlace, pero dentro de TextView
.
Observación 2:
android:linksClickable="true"
todavía no funciona (a partir de Android 3.2), use p. 2 en cambio
Esto funciona bastante correctamente: (En las propiedades de vista de texto, dentro del archivo xml)
android:autolink="web"
Gracias por su ayuda a todos.
He logrado hacer que esto funcione, después de haber encontrado algunos ejemplos en las muestras de Android.
Aquí está el código:
textView.setText(Html.fromHtml(
"<b>text3:</b> Text with a " +
"<a href=/"http://www.google.com/">link</a> " +
"created in the Java source code using HTML."));
textView.setMovementMethod(LinkMovementMethod.getInstance());
Espero que esto ayude a otros ...
La solución: Linkify.addLinks(chatText,Linkify.ALL);
Linkify es la clase que debes usar para crear enlaces. Por cierto, ¿cuál es la razón para no usar Linkify?
Puede vincular todo el texto de su vista de texto para acciones como visitar un sitio web o llamar a un número de teléfono basado en el esquema. Android proporciona la forma más fácil de hacerlo. Considere el siguiente código.
TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);
Para crear enlaces personalizados, la misma clase Linkify ofrece varias opciones. Google ha publicado un blogpost sobre esto .
No pude entenderlo, pero finalmente comenzó a funcionar cuando hice algo como:
tvTermsOfUse.setText(Html.fromHtml(getString(R.string.tv_terms_of_use_html)));
Linkify.addLinks(tvTermsOfUse, Linkify.ALL);
tvTermsOfUse.setMovementMethod(LinkMovementMethod.getInstance());
La vista de texto se ve como:
<TextView
android:id="@+id/tv_terms_of_use"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:textAlignment="gravity"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="15sp" />
y la cadena de resolución:
<string name="tv_terms_of_use_html">
<![CDATA[This is link to <a href="http://google.com/">Google</a>.]]>
</string>
Parte importante: Linkify.addLinks
se debe hacer antes de tvTermsOfUse.setMovementMethod
, de lo contrario no funcionará.
Ninguna otra configuración es necesaria en XML.
Me tomó alrededor de una hora darme cuenta, espero que ayude a alguien.
EDITAR:
Según el comentario de @rfellons.
Gracias. También para mi funciona ... PERO solo con
<uses-permission android:name="android.permission.INTERNET"/>
en Manifest.xml. - rfellons 7 de septiembre a las 13:31
Asegúrate de revisarlo también.
No puedo responder a su respuesta por alguna razón; Solo quería decir que puedes omitir textView.setText
y solo ponerlo en un recurso de cadena, y configurar eso usando android:text
. Solo necesita mantener el textView.setMovementMethod(LinkMovementMethod.getInstance());
; por desgracia, android:linksClickable="true"
por sí mismo no funciona.
Para agregar los enlaces dinámicamente (obtenidos desde el servidor), esto funciona:
textView.setText(Html.fromHtml(
"<a href=" + response.getLink()
+ ">" + context.getString(R.string.link_from_server) + "</a> "));
y en XML agrega esto:
android:linksClickable="true"
Si su archivo strings.xml tiene esto:
<string name="link_from_server">Dynamic Link</string>
Esto agregará "Enlace dinámico" a su vista de texto y, si lo toca, irá al enlace proporcionado por su servidor.
Utilizar
android:linksClickable="true"
android:autoLink="web"