2015-04-02 3 views
8

enter image description hereFaire une chaîne cliquable, a souligné dans un TextView

Je veux faire la chaîne « ce lien » et souligné cliquable, mais je ne sais pas comment y parvenir.

fichier XML:

<string name="submitText">Before you submit, please check out &lt;u>this link&lt;/u></string> 

Dans mon fragment:

tvSubmit.setText(Html.fromHtml(getString(R.string.submitText))); 

Je ne veux pas toute la chaîne à être cliquable, seule la partie soulignée. Je ne peux pas utiliser un LinearLayout horizontal avec 2 cellules, parce que sur les appareils plus petits la chaîne n'aura pas un aspect continu, elle sera sectionnée en 2 cellules.

Qu'ai-je essayé:

tvSubmit.setMovementMethod(LinkMovementMethod.getInstance()); 
Spannable sp = (Spannable) tvSubmit.getText(); 
ClickableSpan click = new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     showLink(); 
    } 
}; 
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

Le code fait ci-dessus toute la chaîne souligné ainsi que la couleur du texte est changé en bleu clair.

+0

Vous pouvez utiliser 'HTML.fromHTML' et insérer un' this link 'dans votre chaîne. –

Répondre

6

le problème est que vous définissez la durée de la chaîne entière (sp.setSpan(click, 0, sp.length()). Pour corriger, vous devez définir la durée cliquable uniquement sur le this link. Je l'ai fait la même chose de cette façon:

<string name="submitText">Before you submit, please check out %1$s</string> 
<string name="this_link">this link</string> 

dans votre activité

String thisLink = getString(R.string.thisLink); 
String yourString = getString(R.string.submitText, thisLink); 
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(yourString); 
spannableStringBuilder.setSpan(click, 
       startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

où startIndex et endIndex sont l'indice de thisLink dans yourString. J'ai séparé les deux chaînes parce que c'était plus facile de chercher les index, surtout si vous avez à faire avec des traductions. Pour calculer startIndex, vous pouvez utiliser yourString.indexOf(thisLink) et endIndex est startIndex + the length of thisLink. Je vous laisse les chèques ordinaires, (indices négatifs, et tout ce qui pourrait provoquer une IndexOutBoundException)

-1

Vous pouvez essayer avec le code ci-dessous ..

String str = "Before you submit, please check out this link"; 
tvSubmit.setMovementMethod(LinkMovementMethod.getInstance()); 
tvSubmit.setText(setClickablePart(str), BufferType.SPANNABLE); 

Pour Event Handling Cliquez en Textview avec méthode ci-dessous

private SpannableStringBuilder setClickablePart(String str) 
    { 
     SpannableStringBuilder m_spannableStringBuilder = new SpannableStringBuilder(str); 

     int m_index = str.indexOf("this"); 

     final String clickString = str.substring(m_index, str.length()); 
     m_spannableStringBuilder.setSpan(new ClickableSpan() 
     { 
      @Override 
      public void onClick(View widget) 
      { 
       Toast.makeText(MainActivity.this, clickString, Toast.LENGTH_SHORT).show(); 
      } 
     }, m_index, str.length(), 0); 

     return m_spannableStringBuilder; 
    } 
+0

Cela n'a aucun effet, car la chaîne d'origine ne contient pas réellement une URL ... Lisez attentivement la question. – 2Dee

+0

s'il vous plaît vérifier la réponse modifiée. –

2

vous pouvez définir dans votre strings.xml

<string name="submitText">Before you submit, please check out <a href="actual url">this link</a> 
1
<TextView 
     android:id="@+id/tvSubmit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:[email protected]/submitText //link the content of web 
     android:textColorLink="#576586" //change the color of the link 
     android:textColor="#555555" /> 

dans l'activité // échantillon

String webLinkText = <a href="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png"><img src="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png" alt="Screenshot-Mozilla Firefox (Private Browsing)" width="293" height="254" class="alignnone size-full wp-image-291" /></a> 
tvSubmit = (TextView) findViewById(R.id.tvSubmit); 
tvSubmit.setText(Html.fromHtml(webLinkText))); 

chèque ici for more detailed answer

0
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

valeur de changement 0: avec la position commencer lien dans le texte, par exemple la valeur de changement avec: 10 si vous set 0 il va hyperlien tout le texte.