2011-08-02 13 views
33

Obtengo texto dinámico de un servicio web y lo muestro en un TextView. Algunas veces el TextView tiene url como <a href="http://hello.com">hello</a>. He configurado el texto usando el siguiente código.Enlace activo de Android de la URL en TextView

textView.setText(Html.fromHtml(sampletext)); 

y también establecer android:autoLink="web" en el xml correspondiente que contiene el TextView. Ahora el enlace se muestra correctamente con el color azul y el subrayado, pero encontré que es simplemente un enlace muerto. Nada está sucediendo si tratamos de hacer clic en él. ¿Qué tengo que hacer para que el enlace esté activo?

+2

Hola dalandroid, yo no soy t seguro, pero creo que deberías configurar el evento textView OnClick. Y en ese onClick ponga su código de enlace. Pruébalo No estoy seguro de que pueda ser de ayuda. Gracias. – anddev

+0

has mencionado el permiso de internet en android –

+0

@Avi Kumar Manku Ya ... seguramente –

Respuesta

90

Después de revisar todas las soluciones, un resumen con algunas explicaciones:

android:autoLink="web" 

encontrará una URL y creará un enlace, incluso si android: linksClickable no está configurado, los enlaces se pueden hacer clic por defecto. No tiene que mantener la URL sola, incluso en medio de un texto, se detectará y se podrá hacer clic en ella.

<TextView 
    android:text="My web site: www.stackoverflow.com" 
    android:id="@+id/TextView1" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:autoLink="web"> 
</TextView> 

Para establecer un enlace a través del código, mismo principio, sin necesidad de patrón o androide: autoLink en la disposición, el enlace se encuentra automáticamente Linkify:

final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView); 
    myClickableUrl.setText("Click my web site: www.stackoverflow.com"); 
    Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS); 
+0

Sí, se puede hacer clic en los enlaces, gracias. –

+1

Gracias funciona bien, cómo cargar en webview – Prasad

+1

La respuesta anterior no corresponde a una vista web, si desea utilizar una vista web solo cargue su html en su vista web. –

34

Esto funciona para mí:

<TextView 
    android:text="www.hello.com" 
    android:id="@+id/TextView01" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:autoLink="web"> 
</TextView> 
+1

I Usé esto ... pero está dando con color azul y texto subrayado, pero encontré que es solo un enlace muerto. No hay acción de clic está sucediendo. Ese es mi problema –

+0

Sé que esto es antiguo, debe establecer la opción hacer clic en true y definir la función onclick – user173488

3

tengo dar alguna idea que me he encontrado

TextView tv = (TextView) findViewById(R.id.link); 
    WebView wv = (WebView) findViewById(R.id.webView); 
    URLSpan[] urlSpans = tv.getUrls(); 
    for (URLSpan urlSpan : urlSpans) 
    { 
     wv.loadUrl(urlSpan.getURL()); 
    } 

string.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Hello, Android</string> 
    <string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string> 
</resources> 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 

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

    <WebView 
      android:id="@+id/webView" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1.0" /> 

</LinearLayout> 
+0

para el valor de la etiqueta de cadena de enlace en string.xml, asegúrese de escapar de los siguientes caracteres, de lo contrario, el proyecto podría fallar. & cambie a & cambie a > – hyena

4

la salida de este enfoque:

String text = "Visit stackoverflow.com"; 
    TextView label = new TextView(this); 
    label.setText(text); 
    Pattern pattern = Pattern.compile("stackoverflow.com"); 
    Linkify.addLinks(label, pattern, "http://"); 
+0

¿Qué es Linkify? –

+3

@StealthRabbi 'import android.text.util.Linkify;' –

+0

Oh, por el nombre, supuse que era una lib de terceros. Gracias. –

2

En el código XML, es necesario agregar android:linksClickable="true" en el TextView.

12

de ahorrar un momento dado la verdadera solución es

<TextView 
    android:text="www.hello.com" 
    android:id="@+id/TextView01" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:autoLink="web" 
    android:linksClickable="true"> 
</TextView> 

y lo uso y es obra perfecta

+0

Gracias. funciona perfecto – Rooney

+7

¿Qué sucede si queremos que el texto sea diferente de la URL real? : P – Blaise

0

Hay 2 casos:

  • el texto parece "click on http://www.hello.com"

º en solo hay que ajustar la atributo autoLink en el xml de manera que el enlace se detecta automáticamente en el texto:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:autoLink="web" 
    android:text="click on http://www.hello.com"/> 
  • el texto parece click on <a href="http://hello.com">hello</a>

entonces usted tiene que hacer por código y diga el texto es hTML, y especificar un método para el movimiento de Enlace clic:

String text = "click on <a href=\"http://hello.com\">hello</a>"; 
    TextView textView = view.findViewById(R.id.textView); 
    textView.setText(Html.fromHtml(text)); 
    textView.setMovementMethod(LinkMovementMethod.getInstance());