I am having some challenges aligning fields. I have tried using custom layout managers and just am not having a consistent layout where fields are aligned properly. I have written the following layout manager and even though it aligns items in left column properly, it fails on right column.
/*
* GridFieldManager.java
*
* © <your company here>, <year>
* Confidential and proprietary.
*/
package com.wastemanagement.containerpickup;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.Field;
/**
*
*/
public class GridFieldManager extends Manager {
private int numColumns;
public GridFieldManager(int numColumns, long style) {
super(style);
this.numColumns = numColumns;
}
protected void sublayout(int width, int height){
int [] columnWidths = new int[numColumns];
int availableWidth = width;
int availableHeight = height;
//for each column size allthe fields and get the maximum width
for(int column = 0; column<numColumns; column++){
for(int fieldIndex = column; fieldIndex < getFieldCount(); fieldIndex+=numColumns){
Field field = getField(fieldIndex);
layoutChild(field, availableWidth, availableHeight);
if(field.getWidth()>columnWidths[column]){
columnWidths[column] = field.getWidth();
}
}
availableWidth -= columnWidths[column];
}
int currentRow = 0;
int currentRowHeight = 0;
int rowYOffset = 0;
//set the position of each field
for(int fieldIndex = 0; fieldIndex < getFieldCount(); fieldIndex++)
{
Field field = getField(fieldIndex);
int fieldOffset = 0;
if ((field.getStyle() & Field.FIELD_RIGHT) ==Field.FIELD_RIGHT){
fieldOffset = columnWidths[fieldIndex % numColumns] - field.getWidth();
}
if (fieldIndex % numColumns ==0){
setPositionChild(field,0 + fieldOffset,rowYOffset);
}
else{
setPositionChild(field,columnWidths[(fieldIndex % numColumns)-1]+fieldOffset,rowYOffset);
}
if (field.getHeight()> currentRowHeight){
currentRowHeight = field.getHeight();
}
if (fieldIndex % numColumns == numColumns -1)
{
currentRow ++;
rowYOffset+=currentRowHeight;
currentRowHeight = 0;
}
}
int totalWidth = 0;
for (int i = 0; i < numColumns;i++){
totalWidth += columnWidths[i];
}
setExtent(totalWidth, rowYOffset + currentRowHeight);
}
}