Проба Blackberry с FIELD_BOTTOM в HorizontalFieldManager

Я пытаюсь реализовать экран, как показано ниже:

введите здесь описание изображения

Для этого я использую следующий код. Это вообще не работает.

HorizontalFieldManager outerManager = new HorizontalFieldManager(FIELD_BOTTOM|USE_ALL_HEIGHT);
        outerManager.setBackground(BackgroundFactory.createBitmapBackground(Bitmap.getBitmapResource("img/bghome.png")));

final FCLabelField selectedLabel = new FCLabelField("Hello World", LabelField.USE_ALL_WIDTH | DrawStyle.HCENTER);

selectedLabel.setFontColor(Color.BLACK);
selectedLabel.setBackground(BackgroundFactory.createSolidBackground(0x00cccccc));
outerManager.add(selectedLabel);

HorizontalFieldManager innerManager = new HorizontalFieldManager();

innerManager.setPadding(0, 10, 0, 10);


innerManager.add(new ButtonField( "Button 1", ButtonField.CONSUME_CLICK | ButtonField.FIELD_RIGHT ));
innerManager.add(new ButtonField( "Button 2", ButtonField.CONSUME_CLICK | ButtonField.FIELD_RIGHT ));
innerManager.add(new ButtonField( "Button 3", ButtonField.CONSUME_CLICK | ButtonField.FIELD_RIGHT ));
innerManager.add(tab4);
innerManager.add(tab5);

outerManager.add(innerManager);

innerManager.setBackground(BackgroundFactory.createSolidBackground(0x00cccccc));

add(outerManager);

В чем проблема в моем коде? Как я могу установить экран, как указано выше?


person dev_android    schedule 22.03.2012    source источник


Ответы (2)


Есть несколько способов добиться того, о чем вы просили. Один из способов — использовать метод setStatus(), предложенный BBdev (он будет работать только для экранов типа MainScreen и не будет работать для экранов типа FullScreen). Другой альтернативой может быть выравнивание по нижнему краю вручную.

Важные правила выравнивания, о которых следует помнить:

  • HorizontalFieldManager может выравнивать поля только по вертикали. При добавлении полей в горизонтальный менеджер действуют только эти стили выравнивания: FIELD_TOP, FIELD_VCENTER, FIELD_BOTTOM.

  • VerticalFieldManager может выравнивать поля только по горизонтали. При добавлении полей в менеджер вертикальных полей действуют только эти стили выравнивания: FIELD_LEFT, FIELD_HCENTER, FIELD_RIGHT.

Вот фрагмент кода, который делает то, что вы просили.

public class UISandbox extends MainScreen {
    public UISandbox() {
        super(NO_VERTICAL_SCROLL | NO_HORIZONTAL_SCROLL | USE_ALL_HEIGHT | USE_ALL_WIDTH);

        HorizontalFieldManager outerManager = new HorizontalFieldManager(USE_ALL_HEIGHT);
        outerManager.setBackground(BackgroundFactory.createBitmapBackground(Bitmap.getBitmapResource("img/bghome.png")));

        VerticalFieldManager innerMngr = new VerticalFieldManager(USE_ALL_WIDTH | FIELD_BOTTOM); 
        final LabelField selectedLabel = new LabelField("Hello World", FIELD_HCENTER) {
            protected void paint(Graphics g) {
                g.setColor(Color.BLACK);
                super.paint(g);
            }
        };
        selectedLabel.setBackground(BackgroundFactory.createSolidBackground(0x00cccccc));
        innerMngr.add(selectedLabel);

        GridFieldManager innerInnerMngr = new GridFieldManager(1, 3, USE_ALL_WIDTH);
        innerInnerMngr.setPadding(10, 0, 10, 0);
        innerInnerMngr.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0);
        innerInnerMngr.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0);
        innerInnerMngr.setColumnProperty(2, GridFieldManager.AUTO_SIZE, 0);
        innerInnerMngr.add(new ButtonField("Button 1", ButtonField.CONSUME_CLICK | FIELD_HCENTER));
        innerInnerMngr.add(new ButtonField("Button 2", ButtonField.CONSUME_CLICK | FIELD_HCENTER));
        innerInnerMngr.add(new ButtonField("Button 3", ButtonField.CONSUME_CLICK | FIELD_HCENTER));

        innerMngr.add(innerInnerMngr);
        outerManager.add(innerMngr);
        add(outerManager);
    }
}
person tonymontana    schedule 22.03.2012

Попробуйте добавить все кнопки в один HorizontalFieldManager и используйте setStatus (hfm, в который вы добавили кнопки). Это установит кнопку в нижней части экрана. И добавьте labelField Hello world перед setStatus. Вот и все. :)

person BBdev    schedule 22.03.2012
comment
Как установить фоновое изображение? - person dev_android; 22.03.2012
comment
setBackground(BackgroundFactory.createBitmapBackground(Bitmap.getBitmapResource(your image path))); попробуйте вызвать это на менеджере. - person BBdev; 22.03.2012
comment
и вы хотите установить фон, поэтому просто задайте hfm необходимую высоту и используйте приведенный выше код в этом менеджере и добавьте его перед вашим setStatus(); - person BBdev; 22.03.2012
comment
Вы говорите мне установить hfm на FIELD_BOTTOM|USE_ALL_HEIGHT и добавить в него еще один hrm, все кнопки будут добавлены во внутренний hrm? - person dev_android; 22.03.2012