2012-01-03 8 views
5
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); 

¿Por qué no puedo hacer que mis campos se alineen horizontalmente? He probado diferentes combinaciones, pero no puedo hacer que un solo labelfield esté centrado. Si agrego un segundo campo a continuación con USE_ALL_WIDTH, el primer campo se centra.Campos centrados horizontalmente en un administrador de campo vertical

¡No sé cuál es la manera correcta de hacerlo!

EDIT:

Siguiendo el enlace que aparece a continuación, he intentado hacer:

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); 

El problema es que ahora no recibo ningún campo. ¿Cómo se supone que debo implementarlo?

+0

añadir su LabelField en 'HFM' y tratar de agregarlo a sus' VFM' .. – BBdev

Respuesta

2

Primera añada su Field a un HorizontalFieldManager (digamos HFM), a continuación, añadir que hfm a la vfm, espero que esto va a resolver su problema:

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

Ver la siguiente enlace para encontrar An effective way of aligning fields in a VerticalFieldManager

+0

Gracias, pero el método no funciona para mí. Veré el método del enlace. No puedo creer que algo tan simple sea ridículamente complicado – Adam

+0

Alinear campos en BB a veces es realmente complicado. ¿En qué dispositivo lo intentó? He probado esto en BB 9800 Torch, parece perfecto allí. –

+0

Estoy trabajando en el 9700. Trataré de calcular dentro de mi método de pintura – Adam

10

Aquí están las reglas para la alineación en BlackBerry:

  • A HorizontalFieldManager sólo puede alinear los campos dentro de ella verticalmente. Por lo tanto, al crear esos campos, solo los siguientes estilos (también conocidos como bits de alineación) tienen algún efecto: FIELD_TOP, FIELD_VCENTER, FIELD_BOTTOM. p.ej. new LabelField("My field", Field.Field_VCENTER)

HorizontalFieldManager ejemplo

HorizontalFieldManager example

  • A VerticalFieldManager sólo puede alinear los campos dentro de ella horizontalmente. Solo los siguientes estilos tienen algún efecto: FIELD_LEFT, FIELD_HCENTER, FIELD_RIGHT.

VerticalFieldManager ejemplo

enter image description here

Alineación de tanto horizontal como ejemplo verticalmente

He aquí un ejemplo que se alinea un botón en el centro de la pantalla tanto vertical como horizontalmente:

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); 
     } 
    } 

La pantalla debe tener este aspecto:

Centering vertically and horizontally

usted debería ser capaz de modificar el anterior para obtener sus campos para alinear la forma que desee.

+0

Nice One. pero ¿puedo centrar el VerticalFieldManager como centro el campo del botón de prueba? Mi problema es que tengo un campo en el Administrador de campo vertical y quiero centrar verticalmente ese VerticalFieldManager. Ayúdame si tienes sollutoin de eso. –

+0

No publique preguntas en comentarios, publique una nueva pregunta en StackOverflow. – donturner

+0

@ Adam Si esta respuesta te ha ayudado, considera aceptarla – donturner

2

Compruebe este fragmento de código. No tiene que ser que compiled.

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);  
    } 
} 


Resultando en enter image description here

Cuestiones relacionadas