2015-08-25 171 views
2

我想在每次單擊時在兩個drawable之間添加一個按鈕。我已經有了該背景的XML可繪製代碼和實際按鈕XML。我認爲這對我的Java代碼很不利。單擊時更改按鈕背景

繪製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" /> 

BUTTON 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代碼

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