将 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>
selector
s 通过使用匹配的第一个 item
来工作,因此您将特定状态放在第一位(pressed
、selected
等),以便它可以匹配一个如果可能的话。
<item android:color="@color/white"/>
匹配所有内容,所以你把它放在最后作为没有其他匹配时的后备。如果你把它放在第一位,一切都会匹配它,所以无论按钮处于什么状态,它都会是白色的
问这么简单的问题有点奇怪,但我在某处遗漏了一些东西,我需要帮助。
我正在尝试更改单击按钮时的背景。
这是我的代码:
<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>
selector
s 通过使用匹配的第一个 item
来工作,因此您将特定状态放在第一位(pressed
、selected
等),以便它可以匹配一个如果可能的话。
<item android:color="@color/white"/>
匹配所有内容,所以你把它放在最后作为没有其他匹配时的后备。如果你把它放在第一位,一切都会匹配它,所以无论按钮处于什么状态,它都会是白色的