Можно ли изменить цвет кнопки вне класса активности? - PullRequest
1 голос
/ 20 сентября 2011

У меня есть активность с макетом и несколькими кнопками, я хочу изменить цвет этих кнопок.Но кнопок намного больше, поэтому я хочу изменить их, используя метод, определенный в другом классе.Это возможно?Я попытался создать новый класс, который расширяет текущий класс.Но это становится силой закрыто.

public class Color_change extends Calculate
{
    public  void test()
    {
        Button button = (Button)findViewById(R.id.one);
        button.setTextColor(0xFFFF0000);
    }
}

Calculate - это основной класс, который расширяет Activity.И я звоню, как показано ниже:

Color_change a = new Color_change();
a.test();

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Если текущая активность, отображаемая на экране, не является Color_change, написанный вами код не будет работать.Если вы хотите иметь отдельный класс, который меняет цвет набора кнопок, я бы предложил передать кнопки в некоторой форме коллекции в класс, который меняет цвет кнопки.Вы можете написать класс, подобный этому:

public class ColorChanger
{
  public void changeColor(Collection<Button> buttons)
  {
    for(Button b : buttons) {
       changeButtonColor(b);
    }
  }

  private void changeButtonColor(Button button) {
       switch(button.getId()) {
           case R.id.one:
                button.setTextColor(0xFFFF0000); 
                break;
           default: 
                // set default color?
                break;
       }
  }
}

Тогда вам просто нужно составить список всех кнопок, которые вам нужно передать вашему устройству смены цвета.

List<Button> buttons = new ArrayList<Button>();
buttons.add((Button)findViewById(R.id.one));
//add any more buttons

Просто будьтеПомните, что создание тем и стилей в Android позволяет выполнять множество подобных эффектов.Я был бы уверен, что вы исчерпали свои усилия там, прежде чем перейти к решению кода.

2 голосов
/ 20 сентября 2011

Передайте кнопки в метод test или Context в класс конструктора, и тогда вы сможете изменить цвет. Как в

public class ColorChange extends Calculate {
   public static void test(Button button) {
      button.setTextColor(0xFFFF0000);
   }
}

Также обратите внимание на изменение имени класса в соответствии с соглашениями.

...