自定义按钮(使用选择器文件)不起作用



我正在尝试创建一个;添加到收藏夹";按钮

问题是,除非我一直按按钮,否则抽屉不会改变。一旦我松开按钮,它就会返回到原来的可绘制状态。

我遵循了本教程:https://www.youtube.com/watch?v=Nn4-Vn7qk9k,但得到了不同的结果。

我创建了一个res/drawable/custom_fav_button.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/ic_baseline_favorite_24"/>
<item
android:drawable="@drawable/ic_baseline_favorite_border_24"/>
</selector>

我正在下面的活动中使用它。

<Button
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@drawable/custom_fav_button"/>

提前感谢!

正如您在视频中所看到的,您的代码运行良好,并按照您所说的去做。只有在按下它时才能更改。如果您想在单击后更改它,您应该在可绘制的xml 中添加

drawable_button_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/drawable_button_selected" android:state_selected="true" />
<item android:drawable="@drawable/drawable_button_unselected" android:state_selected="false" />
<item android:drawable="@drawable/drawable_button_unselected" />
</selector>

drawable_button_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<!-- color of the selected button -->
<solid
android:color="@color/purple_200"/>
</shape

drawable_button_nselected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<!-- unselected button background -->
<solid
android:color="@color/gray_dove_three" />
<stroke
android:color="@color/gray_martini"
android:width="2dp"/>

</shape>

在你的屏幕布局中,你有

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me"
android:clickable="true"
android:background="@drawable/drawable_button_selector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

当然,在那之后,您必须根据自己的要求更改按钮状态。例如,只需在点击时切换按钮状态

private fun initLayout() {
button.setOnClickListener {
it.isSelected = !it.isSelected
Log.d("Click Me", "Button isSelected" + it.isSelected)
Toast.makeText(this, "Button Clicked and isSelected = " + it.isSelected, Toast.LENGTH_SHORT).show()
}

最新更新