我有一些TextViews,它们被动态地添加到LinearLayout中。这些TextViews是可点击的并且有一个onLongClickListener(我还打算稍后添加onClickListener)
这就是事情,我希望这些TextView在按下时改变它们的背景颜色,我读到你可以使用选择器来做这样的事情。
所以我在res / drawable / text_view_pressed.xml中创建了这个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="#000000"/>
<item android:state_pressed="false"
android:color="#FFFFFF"/>
</selector>
我尝试创建一个TextView,使用这个xml文件就像这样:
TextView t = new TextView(this);
t.setBackgroundColor(R.drawable.text_view_pressed);
但是当我这样做时,它会在t.setBackgroundColor中给出这个错误:“应该在这里传递已解析的颜色而不是资源ID:getResources()。getColor(R.color.text_view_pressed)”但它不起作用如果我使用getResources()。getColor(R.color.text_view_pressed)。
任何人都知道该怎么做?
答案 0 :(得分:2)
你走在正确的轨道上。但是有一个重要的细节。
状态可能会影响两种类型的资源:ColorStateList
和StateListDrawable
。
颜色状态列表只能在某些上下文中使用,例如TextView.setTextColor()
。据我所知,如果要在按下时更改视图的背景,则不能将颜色状态列表用作setBackgroundColor()
的参数。你需要一个可绘制的状态列表。在状态列表drawable中,android:drawable
属性是必需的。
所以,总结一下:
res\drawable
,setBackgroundResource()
代替setBackgroundColor()
。示例文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/white" />
<item android:drawable="@android:color/black"/>
</selector>
如果您想使用自定义颜色而不是白色和黑色,只需define them as resources in res\values
并从此处引用它们。