2015-08-25 3 views
2

Я хочу разместить кнопку, которая изменяется между двумя чертежами каждый раз, когда вы нажимаете. У меня уже есть XML-код для этого фона и фактически кнопка XML. Я думаю, что это касается моего кода Java.Сменить кнопку фона при нажатии

Drawable XML

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

КНОПКА XML

<Button 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button" 
    android:layout_below="@+id/imageView" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:background="@drawable/fav" 
    /> 

JAVA CODE

public void OnClickfav() { 
    boolean isPressed = false; 
    but1.setOnClickListener(buttonListener); View.OnClickListener buttonListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isPressed) { 
       but1.setBackgroundResource(R.drawable.ic_star_border_black_16dp); 
      } else { 
       but1.setBackgroundResource(R.drawable.ic_star_black_16dp); 
      } 
      isPressed = !isPressed; 
     } 
    }; 
} 
+0

Использования 'setImageResource' вместо' setBackgroundResource' и создать слушатель перед его регистрацией. – ex0ns

ответ

0

Вы используете своего слушателя перед его созданием.

Попробуйте это:

boolean isPressed = false; 

public void OnClickfav() { 
    but1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isPressed) { 
       but1.setBackgroundResource(R.drawable.ic_star_border_black_16dp); 
      } else { 
       but1.setBackgroundResource(R.drawable.ic_star_black_16dp); 
      } 
      isPressed = !isPressed; 
     } 
    }; 
} 
1

При использовании селектора в XML не должно быть никакой необходимости добавлять код.

0

Если вы используете выталкиваемый, то почему вы делаете это по коду. Создание Drawable селектора и установить его задницу фона button.Like ниже

<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/ic_star_black_16dp" android:state_pressed="true" /> <item android:drawable="@drawable/ic_star_black_16dp" android:state_focused="true" /> <item android:drawable="@drawable/ic_star_border_black_16dp" /> </selector>

+0

Я так пробовал, но когда вы перестали нажимать кнопку, кнопка возвращается к своей базовой форме, а я, что она останется, изменилась. Есть идеи? –

+0

Если вам нужно, чтобы он изменился, просто сделайте это в методе onClick(), например .. button.setBackground (Color.parseColor (# 80000000)); – ADM

Смежные вопросы