У меня есть несколько кнопок типа
font1 = (Button)findViewById(R.id.fontsize1);
font2 = (Button)findViewById(R.id.fontsize2);
Когда я нажимаю на кнопку, я хочу изменить ее цвет текста, а также изменить цвет текста остальных кнопок. Конечно, я не хочу писать много строк. Лучшая практика - это цикл.
font1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
SaveFontSize("fontsize", "font1");
font1.setTextColor(Color.parseColor(color_active));
font1.setBackgroundResource(R.drawable.fonturesgreen);
}
}
});
Я создал список:
List<String> fontarray = Arrays.asList("font1", "font2", "font3", "font4", "font5");
И в цикле я пытался это сделать:
for (int i=0; i<5; i++) {
fontarray.get(i).setTextColor(Color.parseColor(color_active));
}
Это дает мне ошибку, поскольку fontarray.get(i) является строкой, а не кнопкой.
Создание списка кнопок в качестве члена класса вместо:
List<Button> buttonArray = new ArrayList<Button>();
И в onCreate()
:
buttonArray.add((Button)findViewById(R.id.fontsize1));
// same for the rest
теперь вы можете получить к нему доступ так:
for (int i=0; i < buttonArray.length(); i++) {
buttonArray.get(i).setTextColor(Color.parseColor(color_active));
}
вы можете на самом деле перебирать элементы управления в своем макете, находить кнопки и сравнивать их имена (или другие атрибуты, которые вы хотите) со значениями, хранящимися в вашем List<String>
:
LinearLayout yourLayout = (LinearLayout) findViewById(R.layout.yourLayout);
for (int i = 0; i < yourLayout.getChildCount(); i++) {
Object block = yourLayout.getChildAt(i);
if (block instanceof Button) {
Button btn = (Button)block;
// do something with the button
}
}
Вы должны сделать это так:
List<Button> fontarray = Arrays.asList(font1, font2, font3, font4, font5);