blackberry grid fieldmanager

blackberry - GridFieldManager no abarcará todo el ancho de la pantalla



(1)

Bien, estoy desarrollando para Blackberry Bold 9700 y estoy tratando de obtener una cuadrícula de 1X4 (1 fila, 4 columnas) para abarcar todo el ancho de la pantalla de Blackberry, pero sigue siendo insuficiente. Quiero decir, la cuadrícula está alineada a la izquierda por defecto, lo cual está bien si puedo hacer que toda la cuadrícula abarque todo el ancho (no importará entonces). ¿Puede algún desarrollador decirme qué estoy haciendo mal? Pensé que acaba de agregar GridFieldManager.USE_ALL_WIDTH en el constructor al declarar una nueva grilla, pero aún así no funcionará para mí.

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


He proporcionado un ejemplo a continuación que hace el truco. Se basa en el código original que proporcionó, pero se limpia y se vuelve genérico para mayor claridad.

Básicamente, GridFieldManager no admite explícitamente USE_ALL_WIDTH. Al ser un administrador, hereda esta constante, pero su documentación no expresa que es un estado compatible. Su mejor opción es confiar en el estado FIXED_SIZE y calcular el ancho de cada una de sus columnas en función del tamaño de la pantalla (displayWidth / numColumns). Luego puede usar GridFieldManager # setColumnProperty () para definir el ancho fijo para las columnas.

Asegúrate de tener en cuenta el relleno aplicado a las columnas y listo.

Espero que esto ayude.

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