¿Cómo hacer que los enlaces en un TextView sean cliqueables?

1004

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/txtCreditses 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.

Ricardo
fuente
67
android: autoLink = "web" esta es la línea principal que debe agregarse a xml y funciona de maravilla. gracias @Richard
jeet.chanchawat
1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > usa la cadena anterior y funciona. Se sabe que la cadena en href y con la etiqueta de anclaje debe ser la misma y debe tener .com o. * Para trabajar, debe verificar por qué
Shaik Khader
<string name = "txtCredits"> Algún texto aquí <a href=" google.com"> Google </a> </ string > Para el fragmento anterior Haga clic en Algún texto aquí no debería funcionar en mi caso, ¿qué debo hacer?
Ajay Takur
android:focusable="true"resuelto mi problema
Khang .NT

Respuestas:

1228

Enterrado en las demostraciones de API encontré la solución a mi problema:

Link.java:

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

Eliminé la mayoría de los atributos en mi TextView para que coincida con lo que estaba en la demostración.

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

Eso lo resolvió. Bastante difícil de descubrir y arreglar.

Importante : no olvide eliminar autoLink="web"si está llamando setMovementMethod().

Ricardo
fuente
19
Tal vez solo soy yo, pero ¿por qué harías esto con un EditText?
Justin
1
Resulta que solo setMovementMethod es necesario para lograr el objetivo.
superarts.org
3
Solo como un comentario, he visto algunos Samsung Galaxy S3 con OS 4.3 que se bloquean cuando se usa "setMovementMethod (LinkMovementMethod.getInstance ())", así que tenlo en cuenta, tuve que crear una validación antes de agregarlo
Jorge Aguilar
40
Igual que aquí. Tenga en cuenta que si se llama a setMovementMethod (), es necesario eliminar autolink = "web" en el archivo XML, de lo contrario, el enlace no funcionará. Gracias por el comentario
voghDev 05 de
66
Simplemente use el atributo "autoLink" en su xml para, por ejemplo: android: autoLink = "web"
Kalpesh
533

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.

Janusz
fuente
3
Se agregó más información arriba. ¿Podría ser la forma en que estoy definiendo la cadena como <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string >? Parece que esto está permitido pero no funciona para mí.
Richard
66
si usa linkify auto no necesita la parte a href. El sistema operativo tomará la cadena para analizarla en busca de URL y convertirá cada URL en un enlace en el que se pueda hacer clic. Pero esto no dará como resultado que la palabra google esté vinculada a google.com. Mostraría www.google.com como enlace.
Janusz
el uso del enlace automático también funciona perfecto para mí, la vista de texto simple sin padre en absoluto.
Euther
2
android: autoLink también funciona muy bien para vincular números de teléfono, direcciones y direcciones de correo electrónico (o todo lo anterior).
CloudyMusic
54
No, no lo es, porque esta respuesta no funciona si no desea utilizar una etiqueta de anclaje con un texto de visualización diferente de la URL
cprcrack
375

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:
  • Algún texto <a href="http://www.google.com">http://www.google.com</a>
  • Algún texto http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); funcionará con lo siguiente (se resaltará y se podrá hacer clic en él):
  • Algún texto <a href="http://www.google.com">http://www.google.com</a>
  • Algún texto http://www.google.com
  • Algún texto <a href="http://www.google.com">Go to Google</a>

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 tenerlo android:autoLink="web"en su diseño XML si desea que se pueda hacer clic en todos los enlaces.

Jeshurun
fuente
setMovementMethod no funciona con la segunda opción que mencionó, es decir, google.com ... ¿alguna actualización?
Darpan
16
Gracias por señalar que <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!
cwhsu
Este funciona. Probado en API 29.
Wrichik Basu
96

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:

&lt;a href="http://www.google.com">Google&lt;/a>

y no:

<a href="http://www.google.com">Google</a>

En general, codifique todos los galones en la cadena de esa manera. Por cierto, el enlace debe comenzar conhttp://

Luego (como se sugiere aquí ) configure esta opción en su TextView:

 android:linksClickable="true"

Finalmente, en código, haga:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

Eso es todo, no se requieren expresiones regulares u otros hacks manuales.

Błażej Czapp
fuente
77
Esto creará un analizador HTML cada vez que se ejecute este código. Tenga en cuenta que si usa esto para crear enlaces dentro de un elemento de la lista o en otros lugares críticos de rendimiento en su aplicación. Durante la creación de un elemento de lista, esto aumenta el tiempo de ejecución de mis métodos getView en un 50%
Janusz
1
También tenga en cuenta que los espacios en la URL deben reemplazarse con%20
Nicolas Tyler
Puede evitar los problemas de codificación de la entidad envolviendo su cadena en la <![CDATA[ ... ]]>etiqueta.
Paul Lammertsma
1
FUNCIONA para mí, gracias. No funciona con <![CDATA[...]]>etiqueta.
ricky.tribbia
Esta debería ser la respuesta! Funcionó perfectamente bien con mi aplicación nativa
Ajay Kulkarni el
69

lo usé simplemente

Linkify.addLinks(TextView, Linkify.ALL);

hace que los enlaces se puedan hacer clic aquí

jai_b
fuente
44
Esta respuesta es la mejor. Funciona en todas las versiones de Android y solo necesitamos agregar ese método cuando el texto se establece en TextView. Bonificación: nos permite agregar enlaces personalizables en los que se puede hacer clic
Kerwan
3
Realmente la respuesta más simple y mejor. funciona para correo electrónico / web al mismo tiempo ... gracias hombre !!!
Imran Ahmed
1
Use LinkifyCompat si necesita algunas de las funciones avanzadas más nuevas
Vaiden,
Bien, hace urls sin <a href...clics
Pavel
También hace que todas las etiquetas "HTML" dentro de trabajo en consecuencia, por ejemplo, <b> ... </ b> etc
Matriz
67

Si desea agregar un enlace similar a HTML, todo lo que necesita hacer es:

  • agregar una cadena de recursos HTML-like:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • agregue su vista al diseño SIN configuración específica de enlace:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • agregue MotionMethod apropiado mediante programación a su TextView:

     mLink = (TextView) findViewById(R.id.link);
     if (mLink != null) {
       mLink.setMovementMethod(LinkMovementMethod.getInstance());
     }

¡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í ...

vizZ
fuente
2
+1 Tienes razón. Debe haber una opción para ingresar un patrón usted mismo para que coincida. De esta manera es bastante tonto.
schlingel
47

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 muestra

    <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/txtDefaultpassword"
        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" />

string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">[email protected]</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>
Shanewaj
fuente
36

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:

<string name="applink">Looking for Digital Visiting card? 
<a href="https://play.google.com/store/apps/details?id=com.themarkwebs.govcard">Get it here</a>
</string>

Ahora puede utilizar esto stringen cualquiera de los Viewsiguientes:

<TextView
    android:id="@+id/getapp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="@color/main_color_grey_600"
    android:textSize="15sp"
    android:text="@string/applink"/>

Ahora, en su Actividad o Fragmento, haga lo siguiente:

TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());

Por ahora, no necesita establecer android:autoLink="web"o android:linksClickable="true"usar este enfoque.

Espero que encuentres esto útil.

Asesha George
fuente
Esto funciona bien, pero cuando presiona hacia atrás desde la web abierta, solo cierre el navegador, pero no vuelva a la aplicación.
Jachumbelechao Unto Mantekilla
27

Espero que esto ayude;

String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
    TextView text = (TextView) findViewById(R.id.text);


    text.setText(Html.fromHtml(value));
    text.setMovementMethod(LinkMovementMethod.getInstance());
Bebin TN
fuente
3
Esto funciona muy bien. También asegúrese de eliminar android:autoLink=?de su TextView.
sulai
Esto es lo que finalmente funcionó para mí. ¡HTML válido y no usar android:autoLink=?es importante!
Neal Sanche
Para Xamarin, la palabra se muestra pero no está subrayada y no se puede hacer clic en ella usando los parámetros anteriores y NO: autoLink, linksClickable
maxweber
Para Xamarin establecer esos y establecer Text o establecer TextFormatted también produce la palabra, pero no se puede hacer clic ni azul / subrayado. Eliminar el enlace automático también falla. Al eliminar solo enlaces, Clickable también falla. Eliminar ambos también falla.
maxweber
helloWorld.TextFormatted = Html.FromHtml (linkURL); con y sin esos también falla. (no vinculado, no azul, no se puede hacer clic)
maxweber
25

Solo qué necesita para agregar esto en la vista de texto en xml

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>
Ahmed Mostafa
fuente
24

Lo más fácil que me funcionó es usar Linkify

TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);

y detectará automáticamente las URL web del texto en la vista de texto.

pks
fuente
Es cierto, pero no se podrá hacer clic en ellos.
FractalBob
Se puede hacer clic en los enlaces.
Octavian Ionel
19

Richard, la próxima vez, deberías agregar este código en TextView en el diseño XML.

android:autoLink="all"

Esto debería ser así.

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/txtCredits"
    android:id="@+id/infoTxtCredits"
    android:autoLink="all"
    android:linksClickable="true">
</TextView>

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.

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
David Dimalanta
fuente
3
No funciona para mi Se puede hacer clic en el enlace, pero se muestra toda la cadena, no solo "Google". De hecho, ninguna de las respuestas aquí o su combinación funciona hasta ahora.
Violet Giraffe
¿Su dispositivo o emulador de Internet está habilitado y configurado en ON (wifi) o tiene LAN conectada, @Violet Giraffe?
David Dimalanta
Está. Nunca logré hacer clic en los enlaces usando solo atributos XML, tuve que recurrir al código Java para eso. Lo cual no es gran cosa, pero no es agradable.
Violet Giraffe
18

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

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);

No te olvides de

import android.widget.TextView;
DeathRs
fuente
16

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.

TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com ");

// Makes the textView's Phone and URL (hyperlink) select and go.
Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
Rahul Raina
fuente
13

Me di cuenta de que usar android:autoLink="web"así

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

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 esta

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

Y funcionó como un encanto.

aLearner
fuente
13

Administrar el color del texto de Linkify también ingrese la descripción de la imagen aquí

tv_customer_care_no.setLinkTextColor(getResources().getColor(R.color.blue));
  tv_customer_care_no.setText("For us to reach out to you, please fill the details below or contact our customer care at  18004190899 or visit our website http://www.dupont.co.in/corporate-links/contact-dupont.html ");
   Linkify.addLinks(tv_customer_care_no, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
   Linkify.addLinks(tv_customer_care_no, Linkify.ALL );
Keshav Gera
fuente
11

Asegúrese de no usarlo setAutoLinkMask(Linkify.ALL)cuando use setMovementMethod(LinkMovementMethod.getInstance())y Html.fromHTML()en HTMLenlaces formateados correctamente (por ejemplo, <a href="http://www.google.com/">Google</a>).

once cinco
fuente
10

Utilizar este...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

y agregue permiso en el archivo de manifiesto

<uses-permission android:name="android.permission.INTERNET"/>
Tej
fuente
1
Esto funcionará, pero tenga en cuenta que la aplicación puede no necesitar permiso de Internet más allá de este TextView en el que se puede hacer clic. Tal vez exagerar en esos casos
Jose_GD
2
¿Realmente se relaciona con la pregunta?
Darpan
2
Esto no era relevante para la pregunta.
afollestad
1
¡Esto nunca fallará!
Skynet
Me gusta este método ya que nos permite mostrar solo el texto de anclaje en lugar de la URL completa. El texto de anclaje también se puede diseñar, por ejemplo, de color verde y subrayado.
bebé perdido
10

Solo necesitas esto:

android:autoLink="web"

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:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />
Androdos
fuente
10

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.comsin 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:

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

Y el TextView NO debería tener android:autolink. No hay necesidad de android:linksClickable="true"ninguno de los dos; Es cierto por defecto.

Kelly McKinnon
fuente
para mí funcionó sin esto, la respuesta aceptada funcionó bien @Kelly ¿puedes decir la versión de Android y el dispositivo en el que obtuviste el problema?
Akhil Dad
No funciona para myapp://esquemas (para enlaces profundos).
CoolMind
7

Así es como resolví los enlaces clicables y visibles en un TextView (por código)

private void setAsLink(TextView view, String url){
        Pattern pattern = Pattern.compile(url);
        Linkify.addLinks(view, pattern, "http://");
        view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
    }
Dominic Bartl
fuente
pero me gustaría ver el texto y, al hacer clic en el texto, ¿redirigirá al enlace (abierto por el navegador)? Esta solución no resuelve eso, ¿verdad?
Duc Tran
6

Use el siguiente código:

String html = "<a href=\"http://yourdomain.com\">Your Domain Name</a>"
TextView textview = (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(Html.fromHtml(html));
Phuc Tran
fuente
6

[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 CDATAetiqueta:

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

Luego, en el código, debe obtener la cadena y asignarla como HTML y establecer un método de movimiento de enlace:

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}
Benny
fuente
5

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.

Jeremy Logan
fuente
2
Los enlaces en TextView tienen un color diferente al de otro texto en la cadena, por lo que creo que se los reconoce como enlaces. Simplemente no se puede hacer clic en ellos :-(
Richard
4

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:

<string name="name1">&lt;a href="http://www.google.com">link text1&lt;/a></string>
<string name="name2">&lt;a href="http://www.google.com">link text2&lt;/a></string>

myactivity.xml:

<TextView 
    android:id="@+id/textview1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

<TextView 
    android:id="@+id/textview2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

myactivty.java (en onCreate ()):

TextView tv1 = (TextView)findViewById(R.id.textview1);
TextView tv2 = (TextView)findViewById(R.id.textview2);

tv1.setText(Html.fromHtml(getResources().getString(R.string.name1)));
tv2.setText(Html.fromHtml(getResources().getString(R.string.name2)));
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setMovementMethod(LinkMovementMethod.getInstance());

Esto creará dos hipervínculos clicables con el texto link text1y link text2que redirigirán al usuario a google.

desmagnetizador
fuente
4

El teléfono de enlace automático no me funcionó. Lo siguiente funcionó a las mil maravillas,

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";        
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());
usuario1995307
fuente
4

Si usa TextView basado en XML, para su requerimiento necesita hacer solo dos cosas:

  1. Identifique su enlace en la cadena, como "esta es mi página web". Puede agregarlo en xml o en el código.

  2. En el xml que tiene TextView, agregue estos:


android:linksClickable="true"

android:autoLink="web"
codeFood
fuente
4

Agregue CDATA a su recurso de cadena

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>
Akexorcist
fuente
3

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)

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:textSize="18dp"
            android:autoLink="all"
            android:text="@string/twitter"
            android:onClick="twitter"/>

public void twitter (View view)
    {
        try
        {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
            startActivity(browserIntent);

        }
        finally
        {
        }
    }

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.

onaclov2000
fuente
No está creando un enlace en el que se pueda hacer clic, solo está haciendo clic en todo el TextView ... Esa no es la pregunta.
clauziere
De acuerdo, pero a veces una solución alternativa que funciona es lo mismo. Claramente, 5 años después de que se haya escrito la respuesta más popular, esto seguía siendo un problema, y ​​han pasado 6 meses porque tuve el mismo problema, pero terminé con una solución diferente pero funcional.
onaclov2000
2

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.

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

ejemplo de cadena

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>
luca992
fuente
Esto es mucho más sencillo y fácil de usar. Tengo varios enlaces con texto personalizado que funciona en un TextView agregado dinámicamente debido a esto. Esto necesita la mayor cantidad de votos posibles. He estado rompiendo mi cabeza sobre cadenas extendidas, TextViews personalizados y métodos HtmlCompat.fromHtml. Muchas gracias @ luca992.
Parth Patel