2010-07-08 11 views
13

Tengo una pregunta: ¿cómo puedo colocar un hipervínculo DENTRO de un bloque de texto de texto normal? Tengo un poco de texto y en el texto menciono una URL y quiero que esta URL tenga un color diferente, subrayada y que se pueda hacer clic.Hipervínculo en Android

sé hipervínculos en Android se pueden colocar con "Linkify" .. y he hecho referencia android docs página

Considere el mismo párrafo anterior con "documentos androide" Quiero mostrar en Android .... .

Respuesta

14

@Fedor .... He encontrado para dar enlaces desde API Demos.

este enfoque finalmente se utilizará para dar un enlace entre el texto del párrafo.

 SpannableString ss = new SpannableString("text4: Click here 
                to dial the phone."); 

    ss.setSpan(new StyleSpan(Typeface.ITALIC), 0, 6, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    ss.setSpan(new URLSpan("tel:4155551212"), 13, 17, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    TextView t4 = (TextView) findViewById(R.id.TextView01); 
    t4.setText(ss); 
    t4.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

¿Podemos establecer una cadena spannable localizada? – Manohar

1

Tome un vistazo a ese TextView underline phone number and hyperlink

pero puedo ver Linkify no le proporciona la funcionalidad que necesita. No hay problema, puedes implementarlo manualmente. Simplemente agregue ClickableSpans y haga clic en handlre. Muestra de código aquí http://www.orangeapple.org/?p=354.

+0

ya que esto es correcto a "Linkify" los WebURLs ... pero "docs Android" debe ser como un enlace y cuando el usuario haga clic en este enlace a continuación, Tager URL debe ser despedido, Igual que la etiqueta de anclaje HTML por ej. Android Docs

+0

Se agregó un enfoque más. – Fedor

+0

gracias por la respuesta ..... realmente útil –

5

@PM - Creo que busca Linkify personalizado para Android, espero que esto puede ayudarle a obtener lo que quiere http://android-geek.blogspot.com/2011/04/linkify-text-in-android.html

+0

+1, ya bharat, este ejemplo también es el mejor. –

+0

+1 Esta solución funciona, ¡aunque desearía que fuera mucho más simple crear un hipervínculo simple en Android! –

+0

Excelente enlace, lo intentaré tan pronto como pueda –

0

Sé que esto es una cuestión de edad, pero esto es un problema Recientemente luché con, y no encontré ninguna respuesta de StackOverflow que me ayudó. Entonces, después de una extensa experimentación, encontré una solución y pensé que la compartiría para la posteridad.

En su strings.xml, usar etiquetas HTML y los marcadores:

<string name="example"><![CDATA[I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string> 

En el código XML, asegúrese de que no añade ningún atributos especiales. NO use android: autolink

En su código Java, debe usar fromHtml, Linkify y LinkMovementMethod. Asegúrese de llamar antes de Linkify LinkMovementMethod

exampleTextView.setText(Html.fromHtml(getString(R.string.example))); 
Linkify.addLinks(exampleTextView, Linkify.WEB_URLS); 
exampleTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

Otra advertencia: si está utilizando estos enlaces HTML, en los que un enlace tiene texto de la pantalla que no coincide con la URL de Google (www.google.com) y, no ponga URL sin procesar en la cadena. Por lo tanto:

<string name="example"><![CDATA[www.google.com I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string> 

a su vez, "www.google.com" en un enlace, pero no se enciende "docs android" en un enlace.

Esto fue muy frustrante para mí, ya que probé muchas combinaciones diferentes y seguí muchos ejemplos en línea, ninguno funcionó hasta que encontré la combinación mágica correcta descrita anteriormente. Espero que ayude a alguien más!

0

Use Spannable String

private void setTermsAndTextToClickable(TextView tandcTextView, String termsAndCon, String wordTohyperLink, String termsAndConUrl){ 
    if (TextUtils.isEmpty(termsAndCon)){ 
     tandcTextView.setVisibility(View.GONE); 
     return; 
    } 

    if (!TextUtils.isEmpty(termsAndCon) && !TextUtils.isEmpty(wordTohyperLink) && !TextUtils.isEmpty(termsAndConUrl)){ 
     SpannableString ssString = new SpannableString(termsAndCon); 
     int startLoc = termsAndCon.indexOf(wordTohyperLink); 
     int endLoc = termsAndCon.indexOf(wordTohyperLink) + wordTohyperLink.length(); 
     ssString.setSpan(new URLSpan(termsAndConUrl),startLoc,endLoc, 0); 
     tandcTextView.setText(ssString); 
     tandcTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

     ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View widget) { 
       // We display a Toast. You could do anything you want here. 
       Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show(); 

      } 
     }; 
     ssString.setSpan(clickableSpan, startLoc, endLoc, 0); 
    }else{ 
     tandcTextView.setText(termsAndCon); 
    } 

} 
Cuestiones relacionadas