2011-07-13 14 views
47
Ben durumu değişikliği (preslenmiş, odak) Metin rengini değiştirmek gerekir

...nasıl textColor kullanarak SetTextColor (ColorsStateList renkler)

Nasıl ColorsStateList kullanarak bir TextView metin rengini ayarlamak için kurulur? çözüldü

düzenleme:

textView.setTextColor (new ColorStateList (
    new int [] [] { 
     new int [] {android.R.attr.state_pressed}, 
     new int [] {android.R.attr.state_focused}, 
     new int [] {} 
    }, 
    new int [] { 
     Color.rgb (255, 128, 192), 
     Color.rgb (100, 200, 192), 
     Color.White 
    } 
)); 

Change Background Color of TextView on Click

+0

Bunu okudun mu bir renk durumları listesine yüklemek için ContextCompat kullanabilir? http://stackoverflow.com/questions/3506319/android-linearlayout-with-color-resource-what-am-i-doing-wrong –

+0

Sorunuz sadece bir öğretici arıyor ambiguous- olduğunu ColorStateList kullanımı? Hiç aradınız mı? http://stackoverflow.com/questions/3827416/how-to-define-colorstatelist-for-textview –

+0

Evet, ancak XML kullanamıyorum. Bunu programlı olarak yapmalıyım – Rodrigo

cevap

73

kodda renkleri ayarlamak için gerekiyorsa, belki (ColorStateList kullanarak), ama yine de bir XML renk durumları tutmak istiyorum

try { 
    XmlResourceParser parser = getResources().getXml(R.color.your_colors); 
    ColorStateList colors = ColorStateList.createFromXml(getResources(), parser); 
    mText.setTextColor(colors); 
} catch (Exception e) { 
    // handle exceptions 
} 

res/renk/your_colors.xml

: kullanmak istiyor Eğer bir state list kullanmak istiyorsanız
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="#222222"/> 
    <item android:state_selected="true" 
      android:color="#222222"/> 
    <item android:state_focused="true" 
      android:color="#222222"/> 
    <item android:color="#0000ff"/> 
</selector> 
+97

Bunu başarmanın çok daha basit bir yolu var: 'mText.setTextColor (getResources(). GetColorStateList (R.color.your_colors));' –

+0

@ol_v_er görünmüyor Bu şekilde ayarlarsanız renk durumlarını korumak için (en azından benim için değildi). Seçilen renk durumunu vb. Korumak için yukarıdaki yöntemi kullanmam gerekiyordu. –

+0

Renk durumları ne zaman korunmuyor? Bir konfigürasyon değişikliği olduğunda? –

27

Sen, ben de bu sorunla mücadele edildi getColorStateList()

kullanmak zorunda, bunun yerine drawable klasörün, color kaynaklar klasörüne ilan gerekir ve kullanmak setTextColor(getResources().getColorStateList(R.color.your_colors)).

+0

Bu benim için bir çözüm oldu. 'Çizilebilir' klasöründeki seçiciyle tutarsız davranışlar Bazen işe yaramaz, bazen şaşkın olur ve tüm metinler pembeye döner.Bir 'renk' kaynak klasörü ekleyerek ve selector XML dosyasını buraya koyarak her şey iyi geldi . –

3

ayrıca

ColorStateList colors = ContextCompat.getColorStateList(this,R.color.my_color_list);