0

J'ajoute plusieurs champs d'étiquettes dans HFM, dont le texte provient d'une chaîne []. Supposons qu'il y ait 5 étiquettes. Je veux les étiquettes dans Left, HCentre et Right of HFM. Je crée les labelfields comme,Alignement des textes d'étiquettes dans le gestionnaire de champs horizontal dans Blackberry 5.0

String[] labels = {------}; 

for(int i=0;labels.length;i++) 
{ 

     LabelField labelField = new LabelField(labels[i],Field.FOCUSABLE|Field.ACTION_INVOKE){ 

     public void paint(Graphics g) { 
     ------- 
     ------- 
     } 

     protected void layout(int width, int height){ 

      super.layout(Display.getWidth()/3, getContentHeight());       
      setExtent(Display.getWidth()/3, getContentHeight()); 
      //setPosition(Display.getWidth()/3,0); 
}; 

HFM.add(labelField); 

} 

Mais il ne vient pas dans le format que je veux.

Comment le faire? est-ce que je fais quelque chose de mal dans la disposition de Field()? S'il vous plait corrigez moi si je me trompe.

enter image description here

Je joins la capture d'écran de ce que je veux maintenant, mais l'alignement que je veux est 1er LabelField à la gauche de HFM, 2e au Centre et 3e à droite de HFM, mais seulement la chose est que je reçois les LabelTexts d'une chaîne [].

+1

Je pense que GridFieldManager répondre à vos besoins: http://docs.blackberry.com/en/developers/deliverables/11958/Create_grid_layout_877557_11.jsp – rosco

+0

@Nate, je suis en utilisant exactement le même code ci-dessus. Je n'appelle pas HFM.add (labelField) à l'intérieur de la classe LabelField mais j'appelle within() car j'ajoute les LabelFields à l'exécution en récupérant leurs textes à partir d'un String []. – Shreyas

+0

Fondamentalement, ce que je veux est d'aligner les étiquettes dans Gauche, Centre et Droite de HFM que je ne reçois pas. Je ne sais pas quels sont les 1er, 2ème et 3ème LabelField. – Shreyas

Répondre

1
  According to your requirement , this Sample class will help you .. 

     import net.rim.device.api.ui.*; 

     public class JustifiedEvenlySpacedHorizontalFieldManager extends Manager 
     { 
      private static final int SYSTEM_STYLE_SHIFT = 32; 

      public JustifiedEvenlySpacedHorizontalFieldManager() 
      { 
       this(0); 
      } 

      public JustifiedEvenlySpacedHorizontalFieldManager(long style) 
      { 
       super(USE_ALL_WIDTH | style); 
      } 

      protected void sublayout(int width, int height) 
      { 
       int availableWidth = width; 

       int numFields = getFieldCount(); 
       int maxPreferredWidth = 0; 
       int maxHeight = 0; 


       // There may be a few remaining pixels after dividing up the space 
       // we must split up the space between the first and last buttons 
       int fieldWidth = width/numFields; 
       int firstFieldExtra = 0; 
       int lastFieldExtra = 0; 

       int unUsedWidth = width - fieldWidth * numFields; 
       if(unUsedWidth > 0) { 
        firstFieldExtra = unUsedWidth/2; 
        lastFieldExtra = unUsedWidth - firstFieldExtra; 
       } 

       int prevRightMargin = 0; 

       // Layout the child fields, and calculate the max height 
       for(int i = 0; i < numFields; i++) { 

        int nextLeftMargin = 0; 
        if(i < numFields - 1) { 
         Field nextField = getField(i); 
         nextLeftMargin = nextField.getMarginLeft(); 
        } 

        Field currentField = getField(i); 
        int leftMargin = i == 0 ? currentField.getMarginLeft() : Math.max(prevRightMargin, currentField.getMarginLeft())/2; 
        int rightMargin = i < numFields - 1 ? Math.max(nextLeftMargin, currentField.getMarginRight())/2 : currentField.getMarginRight(); 
        int currentVerticalMargins = currentField.getMarginTop() + currentField.getMarginBottom(); 
        int currentHorizontalMargins = leftMargin + rightMargin; 

        int widthForButton = fieldWidth; 
        if(i == 0) { 
         widthForButton = fieldWidth + firstFieldExtra; 
        } else if(i == numFields -1) { 
         widthForButton = fieldWidth + lastFieldExtra; 
        } 
        layoutChild(currentField, widthForButton - currentHorizontalMargins, height - currentVerticalMargins); 
        maxHeight = Math.max(maxHeight, currentField.getHeight() + currentVerticalMargins); 

        prevRightMargin = rightMargin; 
        nextLeftMargin = 0; 
       } 

       // Now position the fields, respecting the Vertical style bits 
       int usedWidth = 0; 
       int y; 
       prevRightMargin = 0; 
       for(int i = 0; i < numFields; i++) { 

        Field currentField = getField(i); 
        int marginTop = currentField.getMarginTop(); 
        int marginBottom = currentField.getMarginBottom(); 
        int marginLeft = Math.max(currentField.getMarginLeft(), prevRightMargin); 
        int marginRight = currentField.getMarginRight(); 

        switch((int)((currentField.getStyle() & FIELD_VALIGN_MASK) >> SYSTEM_STYLE_SHIFT)) { 
         case (int)(FIELD_BOTTOM >> SYSTEM_STYLE_SHIFT): 
          y = maxHeight - currentField.getHeight() - currentField.getMarginBottom(); 
          break; 
         case (int)(FIELD_VCENTER >> SYSTEM_STYLE_SHIFT): 
          y = marginTop + (maxHeight - marginTop - currentField.getHeight() - marginBottom) >> 1; 
          break; 
         default: 
          y = marginTop; 
        } 
        setPositionChild(currentField, usedWidth + marginLeft, y); 
        usedWidth += currentField.getWidth() + marginLeft; 
        prevRightMargin = marginRight; 
       } 
       setExtent(width, maxHeight); 
      } 

     } 

     please have a look on this link :- 
     [http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276][1] 
     you will get all kinds of Custom Components 
     Cheers ..!!! 





    [1]: http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276 
Questions connexes