2011-04-12 16 views
17

Ben res/renk/redeemlist_item_color.xml altında bir XML dosyasında tanımlanan aşağıdaki seçici var: Ben de bir ListView madde düzeninde bir TextViewAyar TextView'un renk programlı

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 

     <item android:state_pressed="true" 
      android:color="#FFFFFF" /> <!-- pressed --> 

     <item android:state_selected="true" 
      android:color="#FFFFFF" /> <!-- focused --> 

     <item android:color="#000000" /> <!-- default --> 

    </selector> 

var. Bu TextView üzerinde android:textColor değerini yukarıdaki seçiciye XML olarak ayarladığımda, öğe seçildiğinde renk doğru olarak değişir. Ancak, şu şekilde programlı Bu kaynağı ayarlamak çalışıyorum: Bu şekilde belirlenen

holder.label.setTextColor(R.color.redeemlist_item_color); 

, renk artık değişiklikleri. Bir seçici bu şekilde TextView'a atanabilir mi?

cevap

25

Bunu çeşitli


Düzenleme ait findViewById veya bir şey eklemek gerekebilir düşünüyorum: Uygun cevap

setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color)); 
+0

İşte benim yorumum HD_Mouse: Tamam, belki de çok fazla kod kaldı. FindViewById() için zaten bir çağrı yaptım. Benim sorunum boş bir işaretçi istisnası ya da bir şey değil, görünüm iyi yükler. Bu, bir BaseAdapter alt sınıfında olan koddur. –

+2

Bir daha ifade edeyim: R.'yi bir değere dönüştürmeniz gerekir. Doğru işlev getViewbyid olduğunu düşündüm. Yanılmışım ... şunu deneyin: setTextColor (getResources(). GetColor (R.color.redeemlist_item_color)); – Rasman

+26

@Rasman: Bu doğru değil, bir ** setTextColor (getResources() .getColorStateList (R.color.redeemlist_item_color)); ** – Leeeeeeelo

0

RASMAN doğrudur benim yorum başına yukarıdaki gibi yanlıştır. TextView'a bir ID, android: id = "@ +/something" vermeniz gerekiyor. Bu kimliği ve findViewById öğesini kullanarak o kişiye bir başvuru alırsınız ve ardından metin rengini ayarlayabilirsiniz.

+0

Tamam, belki çok fazla kod bıraktım. FindViewById() için zaten bir çağrı yaptım. Benim sorunum boş bir işaretçi istisnası ya da bir şey değil, görünüm iyi yükler. Bu, bir BaseAdapter alt sınıfında olan koddur. –

4

Deneyebilirsin:

holder.label.setTextColor (. GetResources() getColor (R.color.redeemlist_item_color));

yerine:

holder.label.setTextColor (R.color.redeemlist_item_color);

+0

Bu doğru değil, bir ** getColorStateList ** yöntemi olmalı ve ** getColor ** değil. – Leeeeeeelo

37

Sen kullanımını bir state list yapmak istiyorsanız ben de bu sorunla mücadele edildi getColorStateList()

kullanmak zorunda, bunun yerine drawable klasörün, color kaynakları klasöründe beyan ve kullanmak gerekir setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color)).

+2

Doğru cevap budur. – speedynomads

+0

ColorStateList'i programsal olarak ayarlamak için http://stackoverflow.com/questions/15543186/colorstatelist-android-programly bakın. –

+0

'Kaynaklar # getColorStateList (int)' API düzey 23'te kullanımdan kaldırıldı. Bunun yerine, 'Kaynaklar # getColorStateList (int, Theme) veya' ContextCompat.getColorStateList (Context, int) 'işlevlerini kullanın. –