2011-07-13 26 views
47

我需要改变时,状态变化(压,聚焦)文本颜色...如何设置TEXTCOLOR使用setTextColor(ColorsStateList颜色)

如何设置使用ColorsStateList一个TextView的文本颜色?

编辑解决:

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

你看过吗? http://stackoverflow.com/questions/3506319/android-linearlayout-with-color-resource-what-am-i-doing-wrong –

+0

你的问题是ambiguous-你只是寻找的教程使用ColorStateList?你有没有搜索过? http://stackoverflow.com/questions/3827416/how-to-define-colorstatelist-for-textview –

+0

是的,但我不能使用XML。我需要做这个编程 – Rodrigo

回答

73

如果您需要设置的颜色代码(使用ColorStateList),但仍希望保持颜色状态中的XML,你可能要使用此:

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

RES /颜色/ your_colors.xml

<?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

有一个更简单的方法来实现这个:'mText.setTextColor(getResources()。getColorStateList(R.color.your_colors));' –

+0

@ol_v_er它似乎没有保留颜色状态,如果你这样设置(至少它不适合我)。我不得不使用上面的方法来保留选定的颜色状态等。 –

+0

它何时不保留颜色状态?当配置发生变化时? –

27

你必须使用getColorStateList()

我也与这个问题所困扰,如果你想使用state list,你需要宣布它在color资源文件夹,而不是drawable文件夹,并使用setTextColor(getResources().getColorStateList(R.color.your_colors))

+0

这是我的解决方案。与'drawable'文件夹中的选择器不一致的行为,有时它会起作用,有时候它会变得混乱,只是将所有的文本变成粉红色。通过添加'color'资源文件夹并将选择器XML文件放在那里,一切都很好。 –

3

你也可以使用ContextCompat加载颜色状态列表

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