设置按钮背景图像更改onClick而不编辑xml,导致按钮背景总是在某些情况下单击问题

时间:2012-07-20 16:57:26

标签: android android-button

我尝试在侦听器中使用此代码更改按钮的onClick图像

public void onClick(View v) {
   if(v==ButtonName)
   ButtonName.setImageResource(R.drawable.clicked_button_image);
   //action code                              

}  

按钮的图像以这种方式正确更改,但是如果有人使用Android设备的后退按钮,该按钮会显示点击的图像(因为显然显示了上一个活动的最后一个实例) )

如果我尝试使用代码:

public void onClick(View v) {
       if(v==ButtonName)
       ButtonName.setImageResource(R.drawable.clicked_button_image);
       ButtonName.setImageResource(R.drawable.unclicked_button_image);
       //action code                              

    } 

按钮的图像不会改变。

我怎么能解决这个问题? (不编辑xml)。

3 个答案:

答案 0 :(得分:0)

单击后退按钮后返回怎么办?

@Override
public boolean onRestore()
{
    if(unclickedImageDisplayed)
    {
       ButtonName.setImageResource(R.drawable.unclicked_button_image);
    }

}

如果您查看documentation和活动生命周期,则可以看到在您返回活动时调用方法on Restore

也许通过在更改按钮背景时更改一个私有变量,并通过检查此布尔值,例如,您可以更改按钮的背景,以编程方式为其提供初始状态。

答案 1 :(得分:0)

要达到这个效果,请尝试以下方法:

你必须在drawable文件夹中创建一个新的xml :(我叫做button_action)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/clicked_button_image" android:state_pressed="true"/>
    <item android:drawable="@drawable/unclicked_button_image"/>
</selector>
布局中的

<Button
        android:id="@+id/infobtncontact"
        style="@style/ButtonNormal"
        android:layout_marginTop="10dp"
        android:background="@drawable/button_action"
        android:src="@drawable/unclicked_button_image" />

可能必须重新启动eclipse以识别更改。

请原谅我糟糕的英语!

答案 2 :(得分:0)

除非您解释为什么要使用此方法,否则您应该使用像这样的自定义按钮

<?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/clicked_button_image" /> <!-- pressed -->
  <item android:state_focused="true" android:drawable="@drawable/focus_button_image" /> <!-- focused -->
  <item android:drawable="@drawable/unclicked_button_image"/> <!-- default -->
</selector>