2014-05-12 71 views
1

我试图在垂直和水平中心垂直和水平的垂直领域管理器中的标签。我已经成功地将它居中放置,但不是垂直放置。问题是没有我尝试过的样式常量(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); 

谢谢!

回答

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); 
0

只是评论凯文的建议解决方案,通过使用利润率定位标签,并​​设置基于屏幕的高度和宽度的边缘。

凯文是100%正确的。 VerticalFieldManager只占用尽可能多的垂直空间,而不是整个屏幕。使用setBackground设置不同的背景颜色以查看操作中的这一点。

凯文的解决方案使包含的标签的大小更大,所以现在VFM将占用更多的空间。

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

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

当你知道可用空间的唯一时间是当字段布局时。经理在他们的sublayout()方法中执行此操作。因此,要创建一个通用的“中心化”管理器,您需要了解如何创建管理器。您还需要了解更多关于MainScreen及其内部处理的信息。为此,我提出以下建议KB文章从官方网站BB:

Custom Manager

Extend Manager

MainScreen explained