【问题标题】:ImageButton background color change onClickImageButton背景颜色改变onClick
【发布时间】:2015-02-19 23:49:10
【问题描述】:

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

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

    <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 更好的方法?

谢谢!

【问题讨论】:

    标签: java android xml


    【解决方案1】:

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

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

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

    【讨论】:

    • 完美运行!这究竟是指什么观点?在我可以看到的这个简单示例中,它尚未在任何地方创建,也没有在其他任何地方使用。
    • @Serephucus:查看这里Button了解更多信息
    【解决方案2】:

    最好创建一个选择器并将其设置为按钮的背景。

    <?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

    【讨论】:

      【解决方案3】:

      有没有比 ImageButtons 更好的方法?
      是的,ImageButtons 主要用于创建“可点击”图像。如果你只是想要一个彩色按钮,一个普通的按钮就可以了。

      您可以通过使用 selector with a Drawable state list. 直接从 XML 设置按钮背景来做到这一点

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

      为什么我当前的代码不起作用?
      您应该像这样将视图作为参数添加到您的方法中:

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

      【讨论】:

      • 我应该提到我稍后会在按钮中添加图像 - 具有透明背景 - 我只是想让颜色更改工作,更多是为了确保我对 Android 有一个普遍的处理比什么都重要。
      • 好吧,无论如何,可绘制状态列表背景也适用于 ImageButtons,所以如果您更喜欢完整的 XML 解决方案,这将适用。
      • 我会的。我在输入时实现了这一点。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2014-09-14
      • 2012-07-22
      • 1970-01-01
      • 2012-04-02
      相关资源
      最近更新 更多