2015-04-02 14 views
8

enter image description hereFai una stringa cliccabile, ha sottolineato in un TextView

Voglio fare la stringa "questo link" sottolineato e cliccabile, ma non so come raggiungere questo obiettivo.

file XML:

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

Nel mio frammento:

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

non voglio l'intera stringa di essere cliccabile, solo la sezione sottolineato. Non riesco a utilizzare un orizzontale LinearLayout con 2 celle, perché su dispositivi più piccoli la stringa non avrà un aspetto continuo, sarà sezionata in 2 celle.

Che cosa ho provato:

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); 

Il codice di cui sopra rende l'intera stringa sottolineato e anche il colore del testo viene modificato in azzurro.

+0

È possibile utilizzare 'HTML.fromHTML' e inserire un' this link 'nella stringa. –

risposta

6

il problema è che si sta impostando l'intervallo per l'intera stringa (sp.setSpan(click, 0, sp.length()). Per risolvere il problema devi impostare l'intervallo selezionabile solo su this link. Ho fatto la stessa cosa in questo modo:

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

nella vostra attività

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); 

dove startIndex e endIndex sono l'indice di thisLink in yourString. Ho separato le due stringhe perché era più facile cercare gli indici, specialmente se si tratta di traduzioni. Per calcolare startIndex è possibile utilizzare yourString.indexOf(thisLink) e endIndex è startIndex + the length of thisLink. Lascio a voi i controlli ordinari, (indici negativi, e tutto ciò che potrebbero causare un IndexOutBoundException)

-1

Si può provare con il codice seguente ..

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

per la gestione di eventi Click nella TextView con sotto Metodo

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

Questo non ha alcun effetto, perché la stringa originale in realtà non contiene un URL ... Leggi attentamente la domanda. – 2Dee

+0

si prega di controllare la risposta modificata. –

2

è possibile definire nel vostro 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" /> 

nell'attività // campione

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))); 

controllo qui for more detailed answer

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

modificare il valore 0: con la posizione cominciare link nel testo, ad esempio modificare il valore con: 10 se imposta 0 collegherà ipertestuali a tutto il testo.

Problemi correlati