[英]Programatically make TextView background color change while pressed
我有一些TextViews动态地添加到LinearLayout中。 这些TextView是可单击的,并具有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)。
有人知道怎么做吗?
您走在正确的轨道上。 但是,有一个重要的细节。
可以受状态影响的资源有两种: ColorStateList
和StateListDrawable
。
颜色状态列表只能在某些上下文中使用,例如,在TextView.setTextColor()
。 据我所知,如果要在按下View时更改其背景,则不能将颜色状态列表用作setBackgroundColor()
参数。 您需要为此绘制一个状态列表。 在状态列表可绘制中, 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>
如果要使用自定义颜色而不是白色和黑色,则只需将它们定义为res\\values
资源,然后从此处引用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.