GridFieldManager将不会跨越整个屏幕宽度

问题描述:

好的,我正在开发黑莓Bold 9700,我正在尝试获得1X4网格(1行,4列)以跨越黑莓屏幕的整个宽度,但它不断缩短。我的意思是,网格默认对齐左侧,如果我可以让整个网格跨越整个宽度(这并不重要)。一些开发者能告诉我我做错了什么吗?我认为你只需在构造函数中添加GridFieldManager.USE_ALL_WIDTH来声明新的网格,但它仍然不适合我。GridFieldManager将不会跨越整个屏幕宽度

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

我在下面提供了一个示例,它基于你提供的原始代码,但是为了清晰起见,它被清理并通用。

基本上,GridFieldManager没有明确支持USE_ALL_WIDTH。作为管理者,它继承了这个常量,但其文档并不表示它是受支持的状态。最好的办法是依靠FIXED_SIZE状态,并根据显示的大小(displayWidth/numColumns)计算每个列的宽度。然后,您可以使用GridFieldManager#setColumnProperty()为列定义固定宽度。

请确保考虑到填充应用到列,你很好去。

希望这会有所帮助。

/** 
* 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

非常感谢!你上面看到的代码是对我的一瞥,我只是在玩图形用户界面,看看可以通过编码完成什么。我之前做过拖放式GUI设计,但没有机会纯粹通过代码设计,所以它应该是一种有趣的体验! – 2010-10-25 20:43:06