2010-10-19 38 views
4

好的,我正在開發黑莓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); 
}} 

回答

10

我在下面提供了一個示例,它基於你提供的原始代碼,但是爲了清晰起見,它被清理並通用。

基本上,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

相關問題