在黑莓中水平和垂直居中标签

时间:2014-05-12 20:26:11

标签: blackberry

我试图在垂直场管理器中垂直和水平地居中标签。我成功地将其水平居中但不垂直居中。问题是我没有尝试过任何样式常量(Field.FIELD_VCENTER,DrawStyle.VCENTER等)。我得到了BlackBerry JRE 6的调试器,我开发了Bold 9900设备。有人可以帮忙吗?

 VerticalFieldManager vfm_listeAeroport=new VerticalFieldManager (USE_ALL_WIDTH){
                    protected void sublayout(int maxWidth, int maxHeight) {
                        super.sublayout(2*Display.getWidth()/3,70);
                        setExtent(2*Display.getWidth()/3,70);
                    }
                    protected void paint(Graphics g){
                        super.paint(g);
                        setBackground(BackgroundFactory.createSolidBackground(0xefc94c));
                    }
                };
    String mText = "Liste des Aéroports";
    LabelField Label = new LabelField(mText,Field.FIELD_HCENTER) {
             public void paint(Graphics graphics){ 
                 graphics.setColor(0xffffff); 
                  super.paint(graphics);           
                   }
                };  
    vfm_listeAeroport.add(Label);
    add(vfm_listeAeroport);

谢谢!

2 个答案:

答案 0 :(得分:0)

DrawStyle.VCENTER会将文字置于标签内,而不是在其经理内。例如,labelfield的高度为50px,经理100px,DrawStyle将以50px为中心。

我认为FIELD_VCENTER无效,因为它位于VerticalFieldManager内。

在这种情况下,我只需为标签设置一个保证金。

int margin_top = (Display.getHeight() - label.getPreferredHeight()) / 2;
int margin_left = (Display.getWidth() - label.getPreferredWidth()) / 2;
label.setMargin(margin_top,0,0,margin_left);

答案 1 :(得分:0)

只是评论Kevin建议的解决方案,通过使用边距定位标签并根据屏幕高度和宽度设置边距。

凯文是100%正确的。 VerticalFieldManager只占用所需的垂直空间,而不是整个屏幕。使用setBackground设置不同的背景颜色以在操作中查看此颜色。

Kevin的解决方案使包含标签的大小更大,因此现在VFM将占用更多空间。

您不需要使用Kevin的解决方案来设置左右边距 - 正如您已经看到的那样,VFM将使用Field_HCENTER水平居中。

Kevins解决方案的问题,以及实际上任何试图猜测需要多少空间的解决方案的问题是,当屏幕上有其他内容时它会失败,例如标题区域或横幅。问题是使用Display.getHeight(),它获取所需的实际高度,而不是屏幕上的“空闲”空间。

唯一一次你知道自由空间的时候,就是在布置场地的时候。管理员在他们的sublayout()方法中执行此操作。因此,要创建通用的“居中”管理器,您需要了解如何创建管理器。您还需要了解有关MainScreen及其内部处理的更多信息。为此,我推荐官方BB网站上的以下知识库文章:

Custom Manager

Extend Manager

MainScreen explained