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

CepVizyon.getPhoneCode() 'nin dizgisi için rengi değiştirmek istiyorum ... bunu nasıl yapabilirim?Bir TextView'ın renk bölümünü nasıl değiştirebilirim?

+0

'u desteklemektedir Buna bakın: http://stackoverflow.com/questions/ 4897349/android-boyama-parçası-of-a-dize kullanarak-textview-settext –

+0

Olası çoğaltılabilir [Android'de TextView span rengini ayarla] (http://stackoverflow.com/questions/3282940/set-color-of -textview-span-in-android) – Suragch

+0

@Suragch Bu yazının benden daha büyük olduğunu nereden biliyorsunuz? :) – atasoyh

cevap

104

Spannable daha esnektir:

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

Bu cevap için teşekkürler! Bu, iOS'taki NSAttributedString'e daha çok benziyor. :) Daha esnek olmak için, text.lenght'i String'in ilk bölümünü bilmemenizi sağlayan text2.indexOf (CepVizyon.getPhoneCode()) ile değiştirin. – iGranDav

+1

"length" ifadesiyle '()' ifadesini 'length' alanı olmayan bir yöntem olarak belirtmelisiniz. Kendim yapardım ama düzenlemeler en az 6 karakter olmalı :) – MSX

+0

Bu en iyi cevap çok uzak. –

-3

Tek yol, myTextView'u, yalnızca telefon kodu için olan birkaç ayrı TextViews'a bölmektir. Daha sonra bu belirli TextView'un rengini kontrol etmek oldukça basittir.

+3

Hayır, kıçındaki acı. Bir spannable kullanma doğru yoldur. –

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

Maneesh'in cevabı ile ilgili olarak, bu işe yarar, ancak renk özniteliği için alıntılar eklemeniz gerekir.

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

Benim için iyi!

  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

rengi ihtiyacı statik metin varsa, dizeleri dosyası üzerinden herhangi bir kod olmadan ekleyebilirsiniz: o zaman

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

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

sonuç

enter image description here

hangi api sürümlerinin üzerinde çalıştığından emin değil, ancak şu ana kadar test edilen api 19 için çalışmaz, bu nedenle muhtemelen en son api sürümlerinin bazıları bu