Изменить фон всех кнопок

Я хотел бы изменить фон всех Buttons в View.

android:background="@drawable/button_red"

И я хотел бы сделать это в событии OnClick().

android:onClick="ChangeCouleur"

Я хотел бы сделать это в цикле foreach, но я не уверен, как это сделать.

Например:

for( b in ... )
    if (b.getid()!=idofthebutton)
         b.setbackgroud(button_red)

Спасибо за любую помощь!


person user1527152    schedule 26.07.2012    source источник
comment
ты хочешь изменить бг всех кнопок или только одной?   -  person Ronnie    schedule 26.07.2012


Ответы (5)


Поместите все свои Buttons в Array из Buttons, затем перейдите к нему и измените фон.

Button button1 = (Button)this.findViewById(...);
Button button2 = (Button)this.findViewById(...);
Button button3 = (Button)this.findViewById(...);

Button[] buttons={button1, button2, button3};

for (Button currentButton : buttons) {
    currentButton.setBackgroundResource(R.drawable.my_new_background);
}
person Andy Res    schedule 26.07.2012
comment
Это позволит выполнить то, что вы хотите. И если вы хотите, чтобы это было динамично, просто возьмите ArrayList из Buttons и сделайте то же самое. - person prolink007; 26.07.2012
comment
здесь button1, button2 - это идентификатор моей кнопки? - person user1527152; 26.07.2012
comment
Нет, это объекты Button. Добавил ясности в ответ. - person prolink007; 26.07.2012
comment
Это такие объекты, как: Button button1=(Button)findViewById(...); - person Andy Res; 26.07.2012
comment
Кнопка [] кнопки = {кнопка1, кнопка2}; у меня ошибка в этой строке Несколько маркеров в этой строке - person user1527152; 26.07.2012
comment
Эта линия в порядке. Убедитесь, что вы правильно получаете ссылки на кнопки. Также сделайте очистку: Проект -> Очистить и переформатируйте код: CTRL+SHIFT+F. - person Andy Res; 26.07.2012

Одна вещь, которую вы можете сделать, это подкласс Button, а затем сделать все кнопки в вашем приложении экземплярами вашего нового класса. Таким образом, если вы решите настроить цвет или изменить что-то еще, вам нужно будет сделать это только один раз, и все кнопки в вашем приложении изменятся. Вот вопрос, который должен дать вам несколько советов о том, как это сделать .

person Hassan    schedule 26.07.2012

Для изменения фона нажатой кнопки

public void changeColor(View v) {
    v.setBackground(btn_red);
}
person Ronnie    schedule 26.07.2012
comment
Вы можете использовать метод changeColor(...), упомянутый выше, но вам нужно будет передать каждый Button этому методу в качестве аргумента. Итак, я не уверен, что это решит вашу проблему. Я предполагаю, что вашей главной задачей является получение всех Buttons в вашем View, я прав? - person prolink007; 26.07.2012
comment
Поскольку вопрос был не ясен, казалось, что он хотел изменить фон нажатой кнопки ... но он хочет противоположного ... изменить фон всех кнопок, кроме нажатой - person Ronnie; 26.07.2012
comment
Согласен, вопрос не ясен. Я исправил это для него, теперь должно быть ясно. - person prolink007; 26.07.2012

Вам нужно будет получить ссылку на все кнопки. Добавьте их в ArrayList или что-то подобное. В вашем методе ChangeCouleur используйте цикл для перебора всех кнопок, меняющих цвет каждой из них.

person Jason Crosby    schedule 26.07.2012

Создайте файл .XML в своем «res/drawable/» и используйте в нем атрибут селектора. И используйте разные изображения для кнопки. Пожалуйста, перейдите по этой ссылке.

http://www.mkyong.com/android/android-imagebutton-selector-example/

Это прояснит вашу идею. :)

person Akshay    schedule 26.07.2012