Я пытаюсь создать кнопку «Добавить в избранное».
Проблема в том, что рисуемый объект не меняется, пока я не нажимаю кнопку. Как только я отпускаю кнопку, она возвращается к исходному рисунку.
Я следовал этому уроку: https://thewikihow.com/video_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_unselected.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()
}
@Maryam Wael Пожалуйста, проверьте мой обновленный ответ. Если вы попробуете код, вы увидите, что он отлично работает и сделает то, что вы хотите. Цвета выбраны случайным образом, и я добавляю всплывающее сообщение, чтобы убедиться, что это действительно работает.
Работает отлично. Спасибо!
AppCompatButton
сделал свое дело для меня. Я использовал Button
вместо этого.
Это сработает только один раз, когда кнопка включена. После этого кнопка не будет работать, потому что она не активирована. Я бы хотел, чтобы изображение менялось каждый раз, когда на него нажимают. Аналогично кнопке «Мне нравится» в Facebook или Instagram.