2

我正在开发一个应用程序,我需要在其中设置两个按钮HorizontalFieldManage。一个Bitmap应该留在左边,另一个LabelField应该水平居中。在这里,我尝试了很多次,但无法先Bitmap在左侧设置,所以请你帮我解决这个问题..

这是我的代码::

VerticalFieldManager VFM = new VerticalFieldManager(USE_ALL_WIDTH){
            public void paint(Graphics g) {
                g.setBackgroundColor(Color.WHITE);
                g.clear();
                super.paint(g);
            }
        };
        HorizontalFieldManager HFM = new HorizontalFieldManager(FIELD_HCENTER){
            public void paint(Graphics g) {
                g.setBackgroundColor(Color.WHITE);
                g.clear();
                super.paint(g);
            }
        };

        Bitmap logom1;
        logom1 = Bitmap.getBitmapResource("logo48X48.png");
        BitmapField imgField = new BitmapField(logom1,Field.FIELD_LEFT);
        LabelField RegistrationLbl = new LabelField("Registration",FIELD_HCENTER | FIELD_BOTTOM);

        FontFamily fontFamily[] = FontFamily.getFontFamilies();
        Font font = fontFamily[1].getFont(FontFamily.CBTF_FONT, 20);
        font = fontFamily[1].getFont(Font.BOLD, 25);
        RegistrationLbl.setFont(font);

        HFM.add(imgField);
        HFM.add(RegistrationLbl);

        VFM.add(HFM);
        add(VFM);
4

2 回答 2

3

Signare 的通用解决方案可以工作,但左边距不太正确。HFM在将标签添加到对象之前,您需要添加的唯一调用是这些(为了清楚起见分为两行) :

int labelX = (Display.getWidth() - RegistrationLbl.getPreferredWidth()) / 2;
RegistrationLbl.setMargin(0, 0, 0, labelX - imgField.getPreferredWidth());

这假定它所在的类 ( Manager) 占据了整个屏幕宽度 ( Display.getWidth())。

阅读这篇文章以获得关于什么是边距的很好的描述

另外,请注意,setMargin()在 6.0 之前的 API 中没有记录,但我相信它实际上可以(但未记录)回到 OS 4.5 左右。

编辑:顺便说一句,您正在分配您的font对象,然后立即将其分配给其他东西。这看起来也不对,尽管它不会影响标签居中的问题。

另一个编辑:如 Rupak 的评论所示,此代码仅在您有固定方向显示时才有效。如果标签应该再次以设备方向更改为中心,那么您需要的不仅仅是这个。如果需要,请对问题进行更多说明,有人会提供帮助!

于 2012-08-03T08:55:08.943 回答
0

试试这个(这不是正确的方法)-

        HorizontalFieldManager VFM = new HorizontalFieldManager(){
        public void paint(Graphics g) {
        g.setBackgroundColor(Color.WHITE);
        g.clear();
        super.paint(g);
        }
        };

        HorizontalFieldManager LogoHFM = new HorizontalFieldManager(FIELD_LEFT);
        Bitmap logom1;
        logom1 = Bitmap.getBitmapResource("logo48X48.png");
        BitmapField imgField = new BitmapField(logom1);
        LogoHFM.add(imgField);


        LabelField RegistrationLbl = new LabelField("Registration",FIELD_HCENTER);
        FontFamily fontFamily[] = FontFamily.getFontFamilies();
        Font font = fontFamily[1].getFont(FontFamily.CBTF_FONT, 20);
        font = fontFamily[1].getFont(Font.BOLD, 25);
        RegistrationLbl.setFont(font);
        RegistrationLbl.setMargin(0,0,0,(Display.getWidth()-logom1.getWidth())/4);


        VFM.add(LogoHFM);
        VFM.add(RegistrationLbl);
        add(VFM);
于 2012-08-03T07:11:31.087 回答