Горизонтальное центрирование полей в вертикальном диспетчере полей - PullRequest
5 голосов
/ 03 января 2012
vfm = new VerticalFieldManager(Manager.VERTICAL_SCROLL);
    vfm.add(new LabelField("horizontally centered...",Field.FIELD_HCENTER | LabelField.FOCUSABLE));
    vfm.add(new LabelField("horizontally centered...",Field.FIELD_HCENTER | LabelField.USE_ALL_WIDTH | LabelField.FOCUSABLE));

    add(vfm);

Почему я не могу выровнять свои поля по горизонтали. Я пробовал разные комбинации, но не могу выделить одно поле для ярлыка. Если я добавлю второе поле ниже с помощью USE_ALL_WIDTH, тогда первое поле будет центрировано.

Я не знаю, как правильно это сделать!

EDIT:

Перейдя по ссылке, указанной ниже, я попытался сделать:

vfm = new VerticalFieldManager(Field.USE_ALL_WIDTH | Field.USE_ALL_HEIGHT){


        protected void sublayout( int width, int height ) {

            super.sublayout( width, height );

            width = getWidth();
            height = getHeight();

            for (int i = 0;i < this.getFieldCount() - 1; i++)
            {
                System.out.println("field:" + i);
                Field field = this.getField(i);
                //this positions the item in the middle of the manager
                int x = (int)((width - field.getWidth()) * 0.50);
                setPositionChild(field, x, field.getTop());
            }
        }


    };


    vfm.add(new LabelField("Facebook"));


    add(vfm);

Проблема в том, что я не получаю никаких полей. Как мне это реализовать?

Ответы [ 3 ]

10 голосов
/ 10 января 2012

Вот правила выравнивания на BlackBerry:

  • A HorizontalFieldManager может выравнивать только поля внутри него по вертикали . Таким образом, при создании этих полей действуют только следующие стили (также известные как биты выравнивания): FIELD_TOP, FIELD_VCENTER, FIELD_BOTTOM. например new LabelField("My field", Field.Field_VCENTER)

Пример HorizontalFieldManager

HorizontalFieldManager example

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

Пример VerticalFieldManager

enter image description here

Пример выравнивания по горизонтали и вертикали

Вот пример, который выравнивает кнопку по центру экрана по вертикали и по горизонтали:

public class AlignmentScreen extends MainScreen{

        public AlignmentScreen(){

            //A MainScreen has a VerticalFieldManager to lay out its 
            //fields from top to bottom, the style bits here tell it
            //to span the whole width of the screen and not to scroll
            super(Manager.USE_ALL_WIDTH | Manager.NO_VERTICAL_SCROLL);

            //Set the VerticalFieldManager to have a GREEN background
            getMainManager().setBackground(BackgroundFactory.createSolidBackground(0xFF00FF00));

            //Create a new HorizontalFieldManager which is centered horizontally
            //and spans the whole height of the containing VerticalFieldManager
            HorizontalFieldManager hfm = new HorizontalFieldManager(Field.FIELD_HCENTER | Manager.USE_ALL_HEIGHT);

            //Set the HorizontalFieldManager's background to RED
            hfm.setBackground(BackgroundFactory.createSolidBackground(0xFFFF0000));

            //Create a button and center align it vertically
            ButtonField button = new ButtonField("Test", Field.FIELD_VCENTER);

            //Add the button to the HoriztonalFieldManager
            hfm.add(button);

            //Add the HorizontalFieldManager to the VerticalFieldManager
            add(hfm);
        }
    }

Экран должен выглядеть следующим образом:

Centering vertically and horizontally

Вы должны быть в состоянии изменить вышеупомянутое, чтобы заставить ваши поля выравниваться так, как вы хотите.

2 голосов
/ 29 февраля 2012

Проверьте этот фрагмент кода. Не должно быть, что сложный .

public final class CenterScreen extends MainScreen {
    public CenterScreen() {        
        LabelField lbl1 = new LabelField("First and Foremost", Field.FIELD_HCENTER);
        lbl1.setBorder(BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10),
            Color.BLUE, Border.STYLE_SOLID));

        LabelField lbl2 = new LabelField("Second", Field.FIELD_HCENTER);
        lbl2.setBorder(BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10),
            Color.RED, Border.STYLE_SOLID));

        LabelField lbl3 = new LabelField("Last but not least", Field.FIELD_HCENTER);
        lbl3.setBorder(BorderFactory.createRoundedBorder(new XYEdges(10, 10, 10, 10),
            Color.GREEN, Border.STYLE_SOLID));

        VerticalFieldManager vfm = new VerticalFieldManager(Field.USE_ALL_WIDTH);        
        vfm.add(lbl1);
        vfm.add(lbl2);
        vfm.add(lbl3);
        add(vfm);    
    }
}


В результате чего enter image description here

2 голосов
/ 03 января 2012

Сначала добавьте Field к HorizontalFieldManager (скажем, hfm), затем добавьте hfm к vfm, надеюсь, это решит вашу проблему:

VerticalFieldManager vfm = new VerticalFieldManager();
HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.FIELD_HCENTER);
hfm.add(new LabelField("My Label"));
add(hfm);

См. Следующую ссылку, чтобы найти Эффективный способ выравнивания полей в VerticalFieldManager

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...