黑莓 - 设置LabelField背景颜色

3

我希望在一个alice blue背景的MainScreen上放置几个右对齐文本的LabelFields。不幸的是,我似乎无法弄清楚如何实现这一点。

我所能做的最好的办法就是在MainScreen上设置我的背景为Color.ALICEBLUE,并在屏幕上放置LabelFields(也具有alice blue背景)。

    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的绘制例程可以给我alice blue背景,但是重写LabelFields的绘制例程似乎不够充分。结果是一个白色行,只有标签文本后面的alice blue背景。添加USE_ALL_WIDTH可以解决背景问题,但我无法使用USE_ALL_WIDTH进行右对齐。

有人知道解决方法吗?

2个回答

6
在版本小于等于4.5中,您可以通过重写paint()方法创建VerticalFieldManager:
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 - 如何更改屏幕的背景颜色

也非常好用!此外,这种方法还可以避免我为每个添加的LableField覆盖paint方法。 - Jason George

3

使用

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

不需要覆盖LabelField的paint方法。


非常好!为了设置背景颜色,我实际上还需要覆盖重写paint方法。 - Jason George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接