首次使用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?
谢谢!
答案 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);
}