views:

30

answers:

0

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









    }



}