ImageButton背景颜色改变onClick

时间:2015-02-19 15:38:50

标签: java android xml

首次使用Android开发者,但过去曾使用过C#和Java。

尝试制作一个类似Windows 8的简单GUI。目前我有一个tile(ImageButton),其背景颜色在activity_main.xml中设置。

    <ImageButton
    android:id="@+id/btn1"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:background="#FF0000"
    android:onClick="changeColor"/>

我有一个改变MainActivity.java中颜色的功能。

public void changeColor(){
    ImageButton btn1 = (ImageButton) findViewById(R.id.btn1);
    btn1.setBackgroundColor(Color.GREEN);
}

编译很好,但每次点击红色方块时,应用程序都会崩溃。

我假设有一些关于如何开发Android的有趣的东西,我错过了导致一个非常明显的错误。有没有更好的方法来做这个而不是ImageButtons?

谢谢!

3 个答案:

答案 0 :(得分:3)

  

编译很好,但每次点击红色方块时,应用程序都会崩溃。

因为在xml中添加android:onClick时,方法必须是公开的,并接受一个View作为其唯一参数,我们要在View上调用点击:

public void changeColor(View view){
   ImageButton btn1 = (ImageButton) findViewById(R.id.btn1);
   btn1.setBackgroundColor(Color.GREEN);
}

答案 1 :(得分:2)

最好创建选择器并将其设置为按钮的backgraund。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/button_pressed" />
    <item android:color="@color/button_normal" />
</selector>

希望它会帮助你。 附:有用的link

答案 2 :(得分:0)

有没有更好的方法来做这个而不是ImageButtons?
是的,ImageButtons主要用于创建一个可点击的&#39;图片。如果您只是想要一个彩色按钮,普通按钮就可以了。

您可以使用selector with a Drawable state list.

从XML设置按钮背景来执行此操作

这里可以找到一个很好的例子:https://stackoverflow.com/a/3882151/1683141(颜色也可以作为Drawable)

为什么我目前的代码没有工作?
您应该将视图作为参数添加到方法中,如下所示:

public void changeColor(View view){
   view.setBackgroundColor(Color.GREEN);
}