Blackberry - Настройка цвета фона LabelField

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

Лучшее, что я могу сделать, - это установить цвет фона на Color.ALICEBLUE на MainScreen и разместить LabelFields на экране (также с синим фоном).

    public void paint(Graphics graphics) {
        graphics.setBackgroundColor(Color.ALICEBLUE);
        graphics.clear();
        super.paint(graphics);  
    }

и...

    LabelField display = new LabelField("", LabelField.FIELD_RIGHT){
        public void paint(Graphics graphics) {
            graphics.setColor(Color.DIMGRAY);
            graphics.setBackgroundColor(Color.ALICEBLUE);
            graphics.clear();
            super.paint(graphics);  
        }
    };

Переопределение процедуры рисования MainScreen дает мне синий фон, но переопределение процедур рисования LabelFields кажется недостаточным. Результатом является белая строка с синим фоном только за текстом метки. Добавление USE_ALL_WIDTH исправляет проблему с фоном, но я не могу правильно согласовать с USE_ALL_WIDTH.

Кто-нибудь знает, как это сделать?


person Jason George    schedule 10.08.2009    source источник


Ответы (2)


В версиях ‹= 4.5 вы можете создать VerticalFieldManager с переопределением paint ():

class BGManager extends VerticalFieldManager {
    public BGManager() {
        super(USE_ALL_HEIGHT|USE_ALL_WIDTH);
    }
    public void paint(Graphics graphics)
    {
        graphics.setBackgroundColor(Color.DARKRED);
        graphics.clear();
        super.paint(graphics);
    }
}

Затем используйте его на своем экране, добавив к нему простой LabelField:

class Scr extends MainScreen {
    BGManager manager = new BGManager();
    public Scr() {
        super();
        add(manager);       
        manager.add(new LabelField("Hello!", FIELD_RIGHT));
        manager.add(new LabelField("This is a test", FIELD_RIGHT));
    }
}

В версиях> = 4.6 вы можете использовать метод setBackgroud () для диспетчера экрана по умолчанию:

class Scr extends MainScreen {  
    public Scr() {
        super();
        VerticalFieldManager manager = 
            (VerticalFieldManager)getMainManager();
        manager.setBackground(
            BackgroundFactory.createSolidBackground(
                Color.DARKRED));        
        manager.add(new LabelField("Hello!", FIELD_RIGHT));
        manager.add(new LabelField("This is a test", FIELD_RIGHT));
    }
}

См. BB KB DB-00131 - Как - изменить цвет фона экрана

person Maksym Gontar    schedule 11.08.2009
comment
Также отлично работает! Кроме того, этот метод избавляет меня от необходимости переопределять метод рисования для каждого добавляемого LableField. - person Jason George; 12.08.2009

Использовать

new LabelField("",LabelField.USE_ALL_WIDTH | DrawStyle.RIGHT);

без переопределения метода рисования LabelField.

person Jan Gressmann    schedule 11.08.2009
comment
Работает отлично! Чтобы получить набор цветов фона, мне на самом деле нужно было дополнительно переопределить метод рисования. - person Jason George; 12.08.2009