2010-10-19 14 views
4

Ok, je suis en train de développer pour le Blackberry Bold 9700 et j'essaye d'obtenir une grille 1X4 (1 rangée, 4 colonnes) pour couvrir toute la largeur de l'écran BlackBerry, mais il arrive toujours à court. Je veux dire, la grille est alignée sur la gauche par défaut, ce qui est bien si je peux obtenir toute la grille pour couvrir toute la largeur (cela n'aura pas d'importance alors). Est-ce que certains développeurs peuvent me dire ce que je fais de mal? Je pensais que vous venez d'ajouter GridFieldManager.USE_ALL_WIDTH dans le constructeur lors de la déclaration d'une nouvelle grille, mais cela ne fonctionnera toujours pas pour moi.GridFieldManager ne couvrira pas toute la largeur de l'écran

final class App3_MainScreen extends MainScreen { 
private int numColumns, size; 
// Constructor 
App3_MainScreen() { 
    // declare a layout manager to take care of all the layout stuff 
    numColumns = 4; 
    size = 4; 

    VerticalFieldManager vfm = new VerticalFieldManager(); 
    vfm.add(new LabelField("using all width & long label...", LabelField.ELLIPSIS | Field.FIELD_HCENTER)); 

    int borderHeight = Display.getHeight()/2;g 
    int borderWidth = Display.getWidth()/2; 

    Manager gridFieldManager = new GridFieldManager(1, 4, GridFieldManager.USE_ALL_WIDTH | GridFieldManager.AUTO_SIZE); // 1 row and 4 columns 
    gridFieldManager.add(new ButtonField(""+borderHeight, Field.FIELD_HCENTER)); 
    gridFieldManager.add(new ButtonField("222", Field.FIELD_HCENTER)); 
    gridFieldManager.add(new ButtonField("333", Field.FIELD_HCENTER)); 
    gridFieldManager.add(new ButtonField(""+borderWidth, Field.FIELD_RIGHT)); 

    // set padding around each buttonField - top=0, right=5, bottom=0, left=5 
    gridFieldManager.setPadding(0, 5, 0, 5); 
    int gfmHeight = 48 * (size/numColumns); 
    gridFieldManager.setBorder(BorderFactory.createSimpleBorder(
      new XYEdges(borderHeight/10, 0, borderHeight/10, 0), // top, right, bottom, left 
      Border.STYLE_DASHED)); 

    add(gridFieldManager); 
}} 

Répondre

10

J'ai fourni un exemple ci-dessous qui fait l'affaire. Il est basé sur le code d'origine que vous avez fourni, mais il est nettoyé et rendu générique pour plus de clarté.

Fondamentalement, GridFieldManager ne prend pas explicitement en charge USE_ALL_WIDTH. En tant que Manager, il hérite de cette constante, mais sa documentation n'exprime pas qu'il s'agit d'un état pris en charge. Votre meilleur pari est de s'appuyer sur l'état FIXED_SIZE et de calculer la largeur de chacune de vos colonnes en fonction de la taille de l'affichage (displayWidth/numColumns). Vous pouvez ensuite utiliser GridFieldManager # setColumnProperty() pour définir la largeur fixe pour les colonnes.

Assurez-vous de prendre en compte le rembourrage appliqué aux colonnes et vous êtes prêt à partir.

Espérons que cela aide.

/** 
* Shows an example implementation of how to have a GridFieldManager 
* sized to the width of the Display. 
*/ 
final class ScreenWidthGridExample extends MainScreen 
{ 
    /** 
    * Number of rows in the grid. 
    */ 
    private static final int NUM_ROWS = 1; 

    /** 
    * Number of columns in the grid. 
    */ 
    private static final int NUM_COLUMNS = 4; 

    /** 
    * The grid's column padding. 
    */ 
    private static final int COLUMN_PADDING = 5; 

    /** 
    * Toggle switch to show the border around the grid. 
    */ 
    private static final boolean SHOW_BORDER = true; 

    /** 
    * Allocated a new instance of the ScreenWidthGridExample. 
    */ 
    ScreenWidthGridExample() { 
     // Set up the GridFieldManager 
     GridFieldManager gfm = 
       new GridFieldManager(NUM_ROWS, NUM_COLUMNS, 
       GridFieldManager.FIXED_SIZE); 
     gfm.setColumnPadding(COLUMN_PADDING); 
     if(SHOW_BORDER) { 
      gfm.setBorder(BorderFactory.createSimpleBorder(
        new XYEdges(0, 0, 0, 0), // top, right, bottom, left 
        Border.STYLE_DASHED)); 
     } 
     add(gfm); 

     // Size the columns of the GridFieldManager. Make sure to calculate 
     // for the padding applied to the columns. 
     int columnWidth = (Display.getWidth()/NUM_COLUMNS) - 
       gfm.getColumnPadding(); 
     for(int i = 0; i < NUM_COLUMNS; i++) { 
      gfm.setColumnProperty(i, GridFieldManager.FIXED_SIZE, columnWidth); 
     } 

     // Populate the columns. 
     gfm.add(new ButtonField("1", Field.FIELD_HCENTER)); 
     gfm.add(new ButtonField("2", Field.FIELD_HCENTER)); 
     gfm.add(new ButtonField("3", Field.FIELD_HCENTER)); 
     gfm.add(new ButtonField("4", Field.FIELD_HCENTER)); 
    } 
} 
+0

Merci beaucoup! Le code que vous avez vu ci-dessus était un aperçu de moi juste jouer et pirater avec l'interface graphique pour voir ce qui peut être fait grâce au codage. J'ai déjà fait de la conception GUI par glisser-déposer, mais je n'ai pas eu l'occasion de la concevoir uniquement à l'aide du code, donc ce devrait être une expérience amusante! –