繁体   English   中英

以编程方式使TextView背景色在按下时发生变化

[英]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)。

有人知道怎么做吗?

您走在正确的轨道上。 但是,有一个重要的细节。

可以受状态影响的资源有两种: ColorStateListStateListDrawable

颜色状态列表只能在某些上下文中使用,例如,在TextView.setTextColor() 据我所知,如果要在按下View时更改其背景,则不能将颜色状态列表用作setBackgroundColor()参数。 您需要为此绘制一个状态列表。 在状态列表可绘制中, android:drawable属性是必需的。

因此,总结一下:

  • xml文件应放在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM