2010-10-27 13 views
48
text = text + CepVizyon.getPhoneCode() + "\n\n" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText(); 
    activationText.setText(text); 
myTextView.setText(text); 

Voglio cambiare colore per la stringa di CepVizyon.getPhoneCode() ... come posso fare ??come posso cambiare la parte del colore di un TextView?

+0

Vedi questo: http://stackoverflow.com/questions/ 4897349/android-coloring-part-of-a-string-using-textview-settext –

+0

Possibile duplicato di [Impostare il colore dello span TextView in Android] (http://stackoverflow.com/questions/3282940/set-color-of -textview-span-in-android) – Suragch

+0

@Suragch Come fai a sapere che il post è più vecchio di me? :) – atasoyh

risposta

104

Spannable è più flessibile:

String text2 = text + CepVizyon.getPhoneCode() + "\n\n" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText(); 

Spannable spannable = new SpannableString(text2); 

spannable.setSpan(new ForegroundColorSpan(Color.WHITE), text.length(), (text + CepVizyon.getPhoneCode()).length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

myTextView.setText(spannable, TextView.BufferType.SPANNABLE); 
+1

Grazie per questa risposta! Questo è più simile a NSAttributedString in iOS :) Per essere ancora più flessibile, sostituire text.lenght con text2.indexOf (CepVizyon.getPhoneCode()) che consente di non conoscere la prima parte della stringa. – iGranDav

+1

Dovresti mettere '()' dopo 'text.length' dato che' length' è un metodo non un campo. Lo farei io stesso ma le modifiche devono essere di almeno 6 caratteri :) – MSX

+0

Questa è la migliore risposta di gran lunga. –

-3

Un modo è dividere myTextView in pochi separati TextViews, uno dei quali sarebbe solo per il codice di telefono. Quindi il controllo del colore di questo specifico TextView è piuttosto diretto.

+3

Nah, dolore nel culo. Usare un spannable è la strada giusta. –

54
myTextView.setText(Html.fromHtml(text + "<font color=white>" + CepVizyon.getPhoneCode() + "</font><br><br>" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText())); 
12

Per quanto riguarda la risposta di Maneesh, questo funzionerà ma è necessario aggiungere e sfuggire le virgolette per l'attributo di colore.

myTextView.setText(Html.fromHtml(text + "<font color=\"#FFFFFF\">" + CepVizyon.getPhoneCode() + "</font><br><br>" 
      + getText(R.string.currentversion) + CepVizyon.getLicenseText())); 
5

E 'bene per me!

  Spannable spannable = new SpannableString("ABC In-Network DEF"); 
      String str = spannable.toString(); 
      iStart = str.indexOf("In-Network"); 
      iEnd = iStart + 10;/*10 characters = in-network. */ 

      SpannableString ssText = new SpannableString(spannable); 
      ClickableSpan clickableSpan = new ClickableSpan() { 
       @Override 
       public void onClick(View widget) { 
        //your code at here. 
       } 

       @Override 
       public void updateDrawState(TextPaint ds) { 
        super.updateDrawState(ds); 
        ds.setUnderlineText(true); 
        ds.setColor(getResources().getColor(R.color.green)); 
       } 
      }; 
      ssText.setSpan(clickableSpan, iStart, iEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      mTextView.setText(ssText); 
      mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 
      mTextView.setHighlightColor(Color.TRANSPARENT); 
      mTextView.setEnabled(true); 
7

Se hai testo statico che ha bisogno di colore, è possibile aggiungerlo senza alcun codice tramite il file stringhe:

<string name="already_have_an_account">Already have an account? <font color='#01C6DB'>Login</font></string> 

poi

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="64dp" 
    android:text="@string/already_have_an_account"/> 

risultato

enter image description here

non è sicuro su quali versioni di api funzioni, ma non funziona su API 19 che sono state testate finora, quindi probabilmente solo alcune delle più recenti versioni di api supportano questo

Problemi correlati