4

わかりました。BlackBerryBold9700用に開発していて、1X4グリッド(1行4列)をBlackberry画面の幅全体に広げようとしていますが、不足し続けています。つまり、グリッドはデフォルトで左に配置されます。これは、グリッド全体を幅全体にまたがらせることができれば問題ありません(その場合は問題ありません)。一部の開発者は、私が間違っていることを教えてもらえますか?新しいグリッドを宣言するときに、コンストラクターにGridFieldManager.USE_ALL_WIDTHを追加するだけだと思いましたが、それでも機能しません。

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

1 に答える 1

10

以下に、そのトリックを実行する例を示します。これは、提供された元のコードに基づいていますが、明確にするためにクリーンアップされ、汎用化されています。

基本的に、GridFieldManager は USE_ALL_WIDTH を明示的にサポートしていません。Manager であるため、この定数を継承しますが、そのドキュメントにはサポートされている状態であるとは記載されていません。最善の策は、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));
    }
}
于 2010-10-20T15:33:05.453 に答える