Android - сравнить фон кнопки с ресурсом - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь сравнить фон кнопки с файлом ресурсов. Например, у меня есть кнопка

КНОПКА

        <Button
        android:id="@+id/btnGenre"
        android:layout_width="110dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        android:background="@drawable/frame_genre"
        android:text="POST"
        android:padding="16dp"
        android:focusable="true"
        android:clickable="true"/>

Фон имеет drawable/frame_genre. Я пытаюсь сравнить этот фон с файлом Resouce.

Например

Drawable btnBackground = holder.btnGenre.getBackground();
if(btnBackground.getConstantState() == (getResources().getDrawable(R.drawable.frame_genre).getConstantState())){
                   Toast.makeText(context, "WORKED", Toast.LENGTH_SHORT).show();
               }

Хорошо, этот оператор if проверяет, какой фон у кнопки. Если его значение frame_genre, то оно должно продолжаться до блока.

В моем случае фоновая кнопка имеет значение frame_genre, а оператор if должен иметь значение ИСТИНА. Но по какой-то причине, когда я регистрирую фон кнопки Log.d(TAG, btnBackground.getConstantState().toString()); и frame_genre Log.d(TAG,getResources().getDrawable(R.drawable.frame_genre).getConstantState())

Он печатает две разные области памяти.

Я не могу понять, почему, в конце концов, я ' m указывает на тот же файл, который frame_genre. Может кто-нибудь объяснить мне, что такое diffrent?

И я ищу способ проверить кнопку, потому что я хочу изменить ее фон после нажатия.

1 Ответ

1 голос
/ 15 апреля 2020

Вам нужно создать селектор в drawable, это файл xml. Дайте вашим различным изображениям возможность рисовать для состояния, такого как нажатое, нормальное или выбранное, и т. Д. c

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

</selector>

Дайте это xml в качестве фона для вашей кнопки.

        <Button
    android:id="@+id/btnGenre"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    android:background="@drawable/selector_xml_name"
    android:text="POST"
    android:padding="16dp"
    android:focusable="true"
    android:clickable="true"/>

Программно напишите ниже код на clickListner на вашем btnGenre,

if (Objects.equals(btnGenre.getBackground().getConstantState(), this.getResources().getDrawable(R.drawable.btnGenre_selected).getConstantState()))
{
   star.setBackground(R.drawable.btnGenre_normal);
}else {
  star.setBackground(R.drawable.btnGenre_selected);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...