Tengo el siguiente TextView definido:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtCredits"
android:autoLink="web" android:id="@+id/infoTxtCredits"
android:layout_centerInParent="true"
android:linksClickable="true"></TextView>
donde @string/txtCredits
es un recurso de cadena que contiene <a href="some site">Link text</a>
.
Android destaca los enlaces en TextView, pero no responden a los clics. ¿Alguien puede decirme qué estoy haciendo mal? ¿Tengo que configurar un onClickListener para TextView en mi actividad para algo tan simple como esto?
Parece que tiene que ver con la forma en que defino mi recurso de cadena. Esto no funciona:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Pero esto hace:
<string name="txtCredits">www.google.com</string>
Lo cual es un fastidio porque preferiría mostrar un enlace de texto que mostrar la URL completa.
android:focusable="true"
resuelto mi problemaRespuestas:
Enterrado en las demostraciones de API encontré la solución a mi problema:
Link.java:
Eliminé la mayoría de los atributos en mi TextView para que coincida con lo que estaba en la demostración.
Eso lo resolvió. Bastante difícil de descubrir y arreglar.
Importante : no olvide eliminar
autoLink="web"
si está llamandosetMovementMethod()
.fuente
Estoy usando solo
android:autoLink="web"
y funciona bien. Un clic en el enlace abre el navegador y muestra la página correcta.Una cosa que podría adivinar es que alguna otra vista está encima del enlace. Algo transparente llena a todo el padre pero no muestra nada encima del enlace. En este caso, el clic va a esta vista en lugar del enlace.
fuente
Después de pasar un tiempo con esto, descubrí que:
android:autoLink="web"
funciona si tienes enlaces completos en tu HTML. Lo siguiente se resaltará en azul y se podrá hacer clic:view.setMovementMethod(LinkMovementMethod.getInstance());
funcionará con lo siguiente (se resaltará y se podrá hacer clic en él):Tenga en cuenta que la tercera opción tiene un hipervínculo, pero la descripción del enlace (la parte entre las etiquetas) en sí no es un enlace.
android:autoLink="web"
no no trabajar con este tipo de enlaces.android:autoLink="web"
si se establece en XML, se anularáview.setMovementMethod(LinkMovementMethod.getInstance());
(es decir, los enlaces del tercer tipo se resaltarán, pero no se podrá hacer clic en ellos).La moraleja de la historia es el uso
view.setMovementMethod(LinkMovementMethod.getInstance());
en su código y asegúrese de no tenerloandroid:autoLink="web"
en su diseño XML si desea que se pueda hacer clic en todos los enlaces.fuente
<a href="http://www.google.com">Go to Google</a>
no funcionará para AutoLink. Para tantas respuestas sobre SO, esta es la única que lo mencionó. ¡Gracias!Las soluciones anteriores no funcionaron para mí, pero lo siguiente sí (y parece un poco más limpio).
Primero, en el recurso de cadena, defina su etiqueta abriendo galones usando la codificación de entidad HTML, es decir:
y no:
En general, codifique todos los galones en la cadena de esa manera. Por cierto, el enlace debe comenzar con
http://
Luego (como se sugiere aquí ) configure esta opción en su TextView:
Finalmente, en código, haga:
Eso es todo, no se requieren expresiones regulares u otros hacks manuales.
fuente
%20
<![CDATA[ ... ]]>
etiqueta.<![CDATA[...]]>
etiqueta.lo usé simplemente
hace que los enlaces se puedan hacer clic aquí
fuente
<a href...
clicsSi desea agregar un enlace similar a HTML, todo lo que necesita hacer es:
agregar una cadena de recursos HTML-like:
agregue su vista al diseño SIN configuración específica de enlace:
agregue MotionMethod apropiado mediante programación a su TextView:
¡Eso es! Y sí, tener opciones como "autoLink" y "linksClickable" trabajando solo en enlaces explícitos (no incluidos en etiquetas html) también es muy engañoso para mí ...
fuente
Agregué esta línea a
TextView
:android:autoLink="web"
A continuación se muestra un ejemplo de uso en un archivo de diseño.
layout.xml
muestrastring.xml
fuente
Lo siguiente debería funcionar para cualquier persona que esté buscando una combinación de texto e hipervínculo dentro de una aplicación de Android.
En
string.xml
:Ahora puede utilizar esto
string
en cualquiera de losView
siguientes:Ahora, en su Actividad o Fragmento, haga lo siguiente:
Por ahora, no necesita establecer
android:autoLink="web"
oandroid:linksClickable="true"
usar este enfoque.Espero que encuentres esto útil.
fuente
Espero que esto ayude;
fuente
android:autoLink=?
de suTextView
.android:autoLink=?
es importante!Solo qué necesita para agregar esto en la vista de texto en xml
fuente
Lo más fácil que me funcionó es usar Linkify
y detectará automáticamente las URL web del texto en la vista de texto.
fuente
Richard, la próxima vez, deberías agregar este código en TextView en el diseño XML.
Esto debería ser así.
No necesita usar este código (
t2.setMovementMethod(LinkMovementMethod.getInstance());
) para hacer que se pueda hacer clic en el enlace.Además, aquí está la verdad: siempre que configure el enlace automático y los enlaces que se pueden hacer clic , no se olvide de agregar esto en el archivo String.xml para que el enlace que se puede hacer clic funcione.
fuente
mediante el uso de linkify : Linkify toma un fragmento de texto y una expresión regular y convierte todas las coincidencias de expresiones regulares en el texto en enlaces en los que se puede hacer clic
No te olvides de
fuente
Aquí hay un código de Android de una sola línea para que el teléfono y la url sean seleccionables desde textView, sin importar qué es una cadena y qué son los datos. No necesita usar ninguna etiqueta HTML para esto.
fuente
Me di cuenta de que usar
android:autoLink="web"
asífuncionó bien para las URL, pero como tenía una dirección de correo electrónico y un número de teléfono que también quería vincular, terminé usando esta línea
android:autoLink="all"
como estaY funcionó como un encanto.
fuente
Administrar el color del texto de Linkify también
fuente
Asegúrese de no usarlo
setAutoLinkMask(Linkify.ALL)
cuando usesetMovementMethod(LinkMovementMethod.getInstance())
yHtml.fromHTML()
enHTML
enlaces formateados correctamente (por ejemplo,<a href="http://www.google.com/">Google</a>
).fuente
Utilizar este...
y agregue permiso en el archivo de manifiesto
fuente
Solo necesitas esto:
Inserte esta línea en TextView, que se puede hacer clic con referencia a la web. Dirección URL establecida como texto de este TextView.
Ejemplo:
fuente
La respuesta aceptada es correcta, PERO significará que los números de teléfono, los mapas, las direcciones de correo electrónico y los enlaces regulares, por ejemplo,
http://google.com
sin etiquetas href, YA NO se podrá hacer clic ya que no puede tener el enlace automático en el xml.La única solución completa para tener TODO lo que se puede hacer clic que he encontrado es la siguiente:
Y el TextView NO debería tener
android:autolink
. No hay necesidad deandroid:linksClickable="true"
ninguno de los dos; Es cierto por defecto.fuente
myapp://
esquemas (para enlaces profundos).Así es como resolví los enlaces clicables y visibles en un TextView (por código)
fuente
Use el siguiente código:
fuente
[Tested in Pre-lollipop as well as in Lollipop and above]
Puede obtener su cadena HTML desde el backend o desde sus archivos de recursos. Si coloca su texto como una cadena de recursos, asegúrese de agregar la
CDATA
etiqueta:Luego, en el código, debe obtener la cadena y asignarla como HTML y establecer un método de movimiento de enlace:
fuente
La razón por la que tiene el problema es que solo intenta hacer coincidir las direcciones "desnudas". cosas como "www.google.com" o " http://www.google.com ".
Ejecutar su texto a través de Html.fromHtml () debería hacer el truco. Tienes que hacerlo programáticamente, pero funciona.
fuente
No sé si vale la pena agregar otra respuesta, pero por si acaso ...
Tuve que buscar esto en un par de lugares, pero finalmente conseguí que esta versión del código funcionara.
strings.xml:
myactivity.xml:
myactivty.java (en onCreate ()):
Esto creará dos hipervínculos clicables con el texto
link text1
ylink text2
que redirigirán al usuario a google.fuente
El teléfono de enlace automático no me funcionó. Lo siguiente funcionó a las mil maravillas,
fuente
Si usa TextView basado en XML, para su requerimiento necesita hacer solo dos cosas:
Identifique su enlace en la cadena, como "esta es mi página web". Puede agregarlo en xml o en el código.
En el xml que tiene TextView, agregue estos:
fuente
Agregue CDATA a su recurso de cadena
Strings.xml
fuente
Utilizo el enlace automático para "subrayar automáticamente" el texto, pero acabo de hacer un "onClick" que lo gestiona. (Me encontré con este problema yo mismo)
No requiere ningún permiso, ya que está transmitiendo la intención a las aplicaciones que administran esos recursos (navegador IE).
Esto fue lo que funcionó para mí. Buena suerte.
fuente
Perdí tanto tiempo para descubrir que tienes que usar getText (R.string.whatever) en lugar de getString (R.string.whatever) ...
De todos modos, así es como conseguí que el mío funcionara. Con múltiples hipervínculos en la misma vista de texto también.
ejemplo de cadena
fuente