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