将 android 上的 backgroundTint 颜色从 XML 更改无效

change backgroundTint color on android from XML doesn't work

问这么简单的问题有点奇怪,但我在某处遗漏了一些东西,我需要帮助。

我正在尝试更改单击按钮时的背景。

这是我的代码:

<Button
android:id="@+id/some_button"
android:layout_width="wrap_content"
android:layout_height="55dp"
android:padding="5dp"
android:text="@string/somestring"
android:textAllCaps="false"
android:backgroundTint="@color/btn_background_when_selected"
android:layout_margin="5dp"
/>

在 res 文件夹中,我打开了一个名为 'color' 的新资源文件夹,其中有一个名为“btn_background_when_selected”的文件 这是里面的内容 -

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:color="@color/white"/>
 <item android:state_pressed="true" android:color="@color/light_yellow" />
 <item android:state_selected="true" android:color="@color/happy_green" />
</selector>

当我在 属性“backgroundtint”上添加此文件时,xml 中的按钮进行交互,它变成白色。

在我的 setOnClickListener 内的 kotlin 代码中,我添加了这个 -

  it.isSelected=it.isSelected.not()
  println(it.isSelected)

我还调试了代码以查看按钮 onClicked 是否正常工作并且我收到了这个

2022-02-04 16:47:42.610 11419-11419/com.mypackage I/System.out: true
2022-02-04 16:47:43.560 11419-11419/com.mypackage I/System.out: false
2022-02-04 16:47:44.435 11419-11419/com.mypackage I/System.out: true
2022-02-04 16:47:45.168 11419-11419/com.mypackage I/System.out: false

每次点击,作为方面,isSelected 上的属性 由false 变为true ||从真到假

现在我的问题是,虽然一切看起来都很好,但这仍然不起作用,背景颜色仍然没有改变,点击时没有改变,按下时没有改变。

感谢阅读,

尝试将默认状态(白色线)作为最后一行 selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" android:color="@color/light_yellow" />
 <item android:state_selected="true" android:color="@color/happy_green" />
 <item android:color="@color/white"/>
</selector>

selectors 通过使用匹配的第一个 item 来工作,因此您将特定状态放在第一位(pressedselected 等),以便它可以匹配一个如果可能的话。

<item android:color="@color/white"/> 匹配所有内容,所以你把它放在最后作为没有其他匹配时的后备。如果你把它放在第一位,一切都会匹配它,所以无论按钮处于什么状态,它都会是白色的