2015-08-25 174 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