2015-02-19 4 views
0

Первоначально Android-разработчик, хотя использовал C# и Java в прошлом.ImageButton изменение цвета фона onClick

Попытка сделать простой графический интерфейс Windows 8-типа. На данный момент у меня есть одна плитка (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

Есть ли лучший способ сделать это, а не ImageButtons?
Да, ImageButtons предназначены главным образом для создания «интерактивного» изображения. Если вы просто хотите цветную кнопку, обычная кнопка будет работать нормально.

Вы можете сделать это, установив фон кнопок прямо из XML с помощью selector with a Drawable state list.

Хороший пример можно найти здесь: https://stackoverflow.com/a/3882151/1683141 (цвет также будет квалифицироваться как Drawable)

Почему ISN» t мой текущий код работает?
Вы должны добавить вид в качестве параметра в ваш метод, как это:

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

Я должен был упомянуть, что я буду добавлять изображения к кнопкам позже - с прозрачным фоном - я просто хотел, чтобы изменения цвета работали, еще больше, чтобы убедиться, что у меня есть ручка на Android вообще, чем что-либо. – Serephucus

+0

Хорошо, в любом случае, выставляемые фон списка состояний также будут работать для ImageButtons, поэтому, если вы предпочитаете полное решение XML, это будет работать. – Mdlc

+0

Я бы на самом деле.Я выполняю это по мере ввода. :) – Serephucus

3

Компиляция отлично, но каждый раз, когда я нажимаю на красный квадрат, приложение падает.

Поскольку при добавлении в XML, то метод должен быть открытым и принимать вид в качестве единственного параметра, который мы хотим призвать Щелчок:

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

работал отлично! Какое представление эта ссылка точно? Один из них не был создан нигде, и он не используется нигде в этом простом примере, который я вижу. – Serephucus

+0

@Serephucus: см. Здесь [Button] (http://developer.android.com/reference/android/widget/Button.html) для получения дополнительной информации –

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> 

Надеюсь, это поможет вам. P.S. полезный link

Смежные вопросы