2016-02-25 9 views
12

Ho bisogno di evidenziare e rendere l'URL nel testo cliccabile, in modo dinamico.divisione Android con spazio non funzionante per questo caso. Perché?

Per questo, sto usando il metodo seguito

private SpannableString addClickablePart(String string) { 


     string = string.replaceAll("\\n"," \n "); 

     string += " "; 
     SpannableString ss = new SpannableString(string); 
     String[] words = string.split(" "); 
     for (final String word : words) { 


      if (CommonUtilities.isValidURL(word)) { 


       int lastIndex = 0; 

       while(lastIndex != -1){ 

        lastIndex = string.indexOf(word+" ",lastIndex); 

        if(lastIndex != -1){ 
         ClickableSpan clickableSpan = new ClickableSpan() { 
          @Override 
          public void onClick(View textView) { 
           //use word here to make a decision 

           isRefreshingNecessary = false; 

           Intent mIntent = new Intent(ctx, UserWebsiteActivity.class); 
           mIntent.putExtra("website", word); 
           startActivity(mIntent); 
          } 
         }; 

         ss.setSpan(clickableSpan, lastIndex, lastIndex + word.length(), 
           Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

         lastIndex += word.length(); 
        } 
       } 


      } 
     } 

     return ss; 
    } 

Il suo lavoro per la maggior parte dei casi. Ma, non funziona per tutti i casi come nell'esempio qui sotto.

Le informazioni sui prezzi fornite a voi nei vostri termini del piano e condizioni su queste serie di numeri non sarà più applicabile e sarà sostituita da questa struttura di ricarica. Vedi www.ee.co.uk/ukcalling per ulteriori informazioni.

quanto, per il caso di cui sopra, quando ho diviso l'intera stringa utilizzando

String[] words = string.split(" "); 

o

String[] words = string.split("\\s+"); 

Ho See www.ee.co.uk/ukcalling for come un'unica parola. Invece, ho bisogno di questi 3 - See, www.ee.co.uk/ukcalling e for come 3 parole diverse, da non raggruppare come una singola parola.

Non riesco a capire cosa c'è di sbagliato nel modo di dividere con lo spazio. Per favore aiutatemi a sapere.

+2

Perché downvoting? Ho menzionato quello che ho provato. Per favore fatemi sapere cosa c'è di sbagliato, in modo che, posso migliorare, invece di downvoting. – NarendraJi

+0

puoi anche assegnarli a 3 diverse visualizzazioni di testo per semplicità –

+0

Ho delle stringhe dinamiche quindi, non posso trattarle in modo statico. Avrò un'unica vista testuale, in cui è necessario evidenziare le parti dell'URL, ovunque esista @VivekMishra – NarendraJi

risposta

4

Sostituisci tutti i caratteri di spazio bianco non visibili.

string = string.replaceAll("\\t", " "); 
string = string.replaceAll("\\xA0", " "); 
string = string.replaceAll("\\u1680", " "); 
string = string.replaceAll("\\u180e", " "); 
string = string.replaceAll("\\u2000", " "); 
string = string.replaceAll("\\u200a", " "); 
string = string.replaceAll("\\u202f", " "); 
string = string.replaceAll("\\u205f", " "); 
string = string.replaceAll("\\u3000", " "); 

per Java 8

string = string.replaceAll("(^\\h*)|(\\h*$)",""); 

controllo questo how-to-trim-no-break-space-in-java

+0

Questo ha funzionato. Molte grazie :) – NarendraJi

4

Provare così. funziona in tutti i casi Per me

SpannableString ss = new SpannableString("Your String"); 
    ClickableSpan clickableSpan = new ClickableSpan() { 
    @Override 
    public void onClick(View textView) { 
    //Perform Click Here 
    } 
@Override 
public void updateDrawState(TextPaint ds) { 
    super.updateDrawState(ds); 
    ds.setUnderlineText(false); 
} 
}; 

ss.setSpan(clickableSpan, pos, last+5, Spanned.SPAN_USER); 


    desc.setText(ss); 
    desc.setMovementMethod(LinkMovementMethod.getInstance()); 
    desc.setHighlightColor(Color.TRANSPARENT); 

Nota: desc è il mio TextView a cui ho impostato String. Grazie. Aiuta

Problemi correlati