【问题标题】:center a label horizontally and vertically in blackberry在黑莓中水平和垂直居中标签
【发布时间】:2014-05-13 17:35:44
【问题描述】:

我正在尝试在垂直字段管理器中将标签垂直和水平居中。我已经成功地将它水平居中但不是垂直居中。问题是我没有尝试过任何样式常量(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);

谢谢!

【问题讨论】:

    标签: blackberry


    【解决方案1】:

    DrawStyle.VCENTER 将使文本在标签内居中,而不是在其管理器内。例如,labelfield 可能有 50px 的高度和 manager 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);
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      您知道可用空间的唯一时间是在布局字段时。管理器在其 sublayout() 方法中执行此操作。因此,要创建一个通用的“中心”管理器,您需要了解如何创建一个管理器。您还需要了解更多有关 MainScreen 及其内部处理的信息。为此,我推荐BB官网的以下知识库文章:

      Custom Manager

      Extend Manager

      MainScreen explained

      【讨论】:

        猜你喜欢
        • 2012-05-04
        • 2013-07-12
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 2019-07-19
        • 2015-08-29
        相关资源
        最近更新 更多