Blackberry меняет цвет дочерних полей на горизонтальном фокусе менеджера - PullRequest
0 голосов
/ 01 сентября 2009

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

1 Ответ

3 голосов
/ 01 сентября 2009

Если вы в версии 4.5 и ниже, расширьте HorizontalFieldManager, добавьте свойство цвета, используйте его при событии рисования и лишите законной силы при изменении фокуса:

class Scr extends MainScreen {
 HorizontalFieldManager mMainPanel;
 VerticalFieldManager mVerticalPanel;

 public Scr() {
  mMainPanel = new HorizontalFieldManager();
  add(mMainPanel);

  mVerticalPanel = new VerticalFieldManager(USE_ALL_HEIGHT
    | USE_ALL_WIDTH);
  mMainPanel.add(mVerticalPanel);
  for (int i = 0; i < 5; i++) {
   HFMHighlight hfm = new HFMHighlight();
   hfm.setHightlightColor(Color.GRAY);
   hfm.add(new LabelField("Label " + i, FIELD_LEFT));
   hfm.add(new BasicEditField(FIELD_RIGHT));
   mVerticalPanel.add(hfm);
  }
 }
}

class HFMHighlight extends HorizontalFieldManager {

 int mHColor = -1;

 public void setHightlightColor(int color) {
  mHColor = color;
 }

 protected void onFocus(int direction) {
  invalidate();
  super.onFocus(direction);
 }

 protected void onUnfocus() {
  invalidate();
  super.onUnfocus();
 }

 public void paint(Graphics graphics) {
  if (-1 != mHColor && isFocus()) {
   graphics.setBackgroundColor(mHColor);
   graphics.clear();
  }
  super.paint(graphics);
 }
}

Если у вас версия 4.6 и выше, используйте setBackground для VISUAL STATE FOCUS:

class Scr extends MainScreen {
    HorizontalFieldManager mMainPanel;
    VerticalFieldManager mVerticalPanel;

    public Scr() {
        RadioInfo.isDataServiceOperational();
        CoverageInfo.isOutOfCoverage();
        WLANInfo.getWLANState();

        mMainPanel = new HorizontalFieldManager();
        add(mMainPanel);
        mVerticalPanel = new VerticalFieldManager(USE_ALL_HEIGHT
                | USE_ALL_WIDTH);
        mMainPanel.add(mVerticalPanel);
        for (int i = 0; i < 5; i++) {
            HFMHighlight hfm = new HFMHighlight(Color.GRAY);
            hfm.add(new LabelField("Label " + i, FIELD_LEFT));
            hfm.add(new BasicEditField(FIELD_RIGHT));
            mVerticalPanel.add(hfm);
        }
    }
}

class HFMHighlight extends HorizontalFieldManager {

    public HFMHighlight(int color) {
        Background focusedBG = BackgroundFactory.createSolidBackground(color);
        setBackground(VISUAL_STATE_FOCUS, focusedBG);
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }
}

И вот случай, если вы хотите выделить все элементы управления (кнопка, флажок, выбор и редактирование), если горизонтальный менеджер сфокусирован:

class Scr extends MainScreen {
    HorizontalFieldManager mMainPanel;
    VerticalFieldManager mVerticalPanel;

    public Scr() {
        mMainPanel = new HorizontalFieldManager();
        add(mMainPanel);
        mVerticalPanel = new VerticalFieldManager(USE_ALL_HEIGHT
                | USE_ALL_WIDTH);
        mMainPanel.add(mVerticalPanel);
        for (int i = 0; i < 5; i++) {
            HHorizontalFieldManager hfm = new HHorizontalFieldManager();
            mVerticalPanel.add(hfm);
            HButtonField button = new HButtonField("btn");
            button.setHightlightColor(Color.GRAY);
            hfm.add(button);
            HCheckboxField checkbox = new HCheckboxField("chk box", false);
            checkbox.setHightlightColor(Color.GRAY);
            hfm.add(checkbox);
            String choiceItems[] = { "one", "two", "three" };
            HObjectChoiceField dropdown = new HObjectChoiceField("choice",
                    choiceItems);
            dropdown.setHightlightColor(Color.GRAY);
            hfm.add(dropdown);          
            HEditField edit = new HEditField("edit", "___");
            edit.setHightlightColor(Color.GRAY);
            hfm.add(edit);
        }
    }
}

class HHorizontalFieldManager extends HorizontalFieldManager {
    public HHorizontalFieldManager() {
        super();
    }

    public HHorizontalFieldManager(long style) {
        super(style);
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }

    public void paint(Graphics graphics) {
        if (isFocus()) {
            graphics.setBackgroundColor(Color.GRAY);
            graphics.clear();
        }
        super.paint(graphics);
    }
}

class HEditField extends EditField {

    public HEditField() {
        super();
    }

    public HEditField(long style) {
        super(style);
    }

    public HEditField(String label, String initialValue, int maxNumChars,
            long style) {
        super(label, initialValue, maxNumChars, style);
    }

    public HEditField(String label, String initialValue) {
        super(label, initialValue);
    }

    private int mHColor = -1;

    public void setHightlightColor(int color) {
        mHColor = color;
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }

    public void paint(Graphics graphics) {
        if (-1 != mHColor && getManager().isFocus()) {
            graphics.setBackgroundColor(mHColor);
            graphics.clear();
        }
        super.paint(graphics);
    }
}

class HButtonField extends ButtonField {

    public HButtonField() {
        super();
    }

    public HButtonField(long style) {
        super(style);
    }

    public HButtonField(String label, long style) {
        super(label, style);
    }

    public HButtonField(String label) {
        super(label);
    }

    private int mHColor = -1;

    public void setHightlightColor(int color) {
        mHColor = color;
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }

    public void paint(Graphics graphics) {
        if (-1 != mHColor && getManager().isFocus()) {
            graphics.setBackgroundColor(mHColor);
            graphics.clear();
        }
        super.paint(graphics);
    }
}

class HCheckboxField extends CheckboxField {

    public HCheckboxField() {
        super();
    }

    public HCheckboxField(String label, boolean checked, long style) {
        super(label, checked, style);
    }

    public HCheckboxField(String label, boolean checked) {
        super(label, checked);
    }

    private int mHColor = -1;

    public void setHightlightColor(int color) {
        mHColor = color;
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }

    public void paint(Graphics graphics) {
        if (-1 != mHColor && getManager().isFocus()) {
            graphics.setBackgroundColor(mHColor);
            graphics.clear();
        }
        super.paint(graphics);
    }
}

class HObjectChoiceField extends ObjectChoiceField {
    public HObjectChoiceField() {
        super();
    }

    public HObjectChoiceField(String label, Object[] choices, 
        int initialIndex, long style) {
        super(label, choices, initialIndex, style);
    }

    public HObjectChoiceField(String label, Object[] choices, 
            int initialIndex) {
        super(label, choices, initialIndex);
    }

    public HObjectChoiceField(String label, Object[] choices,
            Object initialObject) {
        super(label, choices, initialObject);
    }

    public HObjectChoiceField(String label, Object[] choices) {
        super(label, choices);
    }

    private int mHColor = -1;

    public void setHightlightColor(int color) {
        mHColor = color;
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }

    public void paint(Graphics graphics) {
        if (-1 != mHColor && getManager().isFocus()) {
            graphics.setBackgroundColor(mHColor);
            graphics.clear();
        }
        super.paint(graphics);
    }
}
...