Проблема с менеджером раскладки BlackBerry, виртуальный размер - PullRequest
3 голосов
/ 02 ноября 2010

Я пытаюсь изо всех сил разработать свой первый экран для Blackberry с JDE4.2.1.
Макет, который я пытаюсь создать, выглядит следующим образом:

---------------------------------
!   Header img                  !
!-------------------------------!
! I  !         Title            !
! M  !--------------------------!
! G  !  Body Txt                !
!    !                          !
!    !  Button1 Button2         !
!    !--------------------------!
!    !      Footer text         !
---------------------------------

Пока мне удалось достичьэтот макет с комбинацией Horizontal и VerticalFieldLayout и кода выглядит следующим образом:

class MyScreen extends MainScreen {

    RadioButtonGroup _optionGroup = new RadioButtonGroup();
    Manager _sideBarHzMgr = new HorizontalFieldManager();
    Manager _bodyContentMgr = new VerticalFieldManager();

    public MyScreen(String label) {
        super();
        doHeader(label);
        doBody();
        doFooter();
    }

    void doHeader(String label) {
        setTitle(new LabelField("Application v1.0.1", LabelField.ELLIPSIS));

        Bitmap headerImg = Bitmap.getBitmapResource("header1.jpg");
        headerImg = cropBitmap(headerImg, Display.getWidth(), headerImg.getHeight());
        add(new BitmapField(headerImg));

        Bitmap sidebar = Bitmap.getBitmapResource("sidebar.jpg");
        sidebar = cropBitmap(sidebar, sidebar.getWidth(), Display.getHeight());
        BitmapField bf = new BitmapField(sidebar, BitmapField.NON_FOCUSABLE);

        _sideBarHzMgr.add(bf);

        //Add the screen label to the main body layout
        RichTextField rtf = new RichTextField(label, new int[] { 0, label.length() }, new byte[] { 0 },
                new Font[] { Font.getDefault().derive(Font.BOLD) }, RichTextField.TEXT_ALIGN_HCENTER
                | RichTextField.NON_FOCUSABLE);
        _bodyContentMgr.add(rtf);


    }

    void doBody() {
                RadioButtonField rbField1 = new RadioButtonField("Option1", _optionGroup, true,
                        RadioButtonField.FIELD_LEFT);
                RadioButtonField rbField2 = new RadioButtonField("Option2", _optionGroup, false,
                        RadioButtonField.FIELD_LEFT);

                super._bodyContentMgr.add(rbField1);
                super._bodyContentMgr.add(rbField2);

                //Center the buttons in body content area horizontally
                HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.FIELD_LEFT);
                hfm.add(_closeButton);
                hfm.add(_contButton);

                super._bodyContentMgr.add(hfm);
    }

    void doFooter() {
        _bodyContentMgr.add(new LabelField());
        _bodyContentMgr.add(new SeparatorField());
        _bodyContentMgr.add(new RichTextField("©MyCo footer 2010.", RichTextField.TEXT_ALIGN_HCENTER
                | RichTextField.NON_FOCUSABLE | RichTextField.FIELD_BOTTOM));
        //Finaly add the layout managers to the main screen
        _sideBarHzMgr.add(_bodyContentMgr);
        add(_sideBarHzMgr);
    }
}

Проблема заключается в том, что когда я добавляю заголовок экрана в VerticalLayoutManager (bodyContentMgr) и пытаюсь центрировать его, он заканчиваетсяПереполнение экрана физического размера справа.Не берите в голову количество символов в заголовке или нижнем колонтитуле.Кажется, что виртуальный размер менеджера по некоторым причинам вдвое больше размера экрана.

Есть ли возможность ограничить виртуальный размер bodyContentMgr физическим размером экрана?

Результат:

---------------------------------
!   Header img                  !
!-------------------------------!
! I  !                         Title                 !
! M  !-----------------------------------------------!
! G  !  Body Txt                                     !
!    !                                               !
!    !  Button1 Button2                              !
!    !-----------------------------------------------!
!    !                    Footer text                !
--------------------------------!

1 Ответ

1 голос
/ 02 ноября 2010

В VerticalFieldManager исправлены некоторые существенные ошибки в JDE5.0, поэтому вы можете попробовать макет с помощью симулятора 5.0, чтобы посмотреть, исчезнет ли проблема.Если это так, то это проблема обхода ошибки, а не фундаментальная проблема с вашим макетом.

...