Shreyas
Shreyas

Reputation: 209

align label texts in horizontal field manager in Blackberry 5.0

I am adding multiple label fields in HFM, the text of which is coming from a String[]. Suppose there are 5 labels. I want the labels in Left, HCentre and Right of HFM. I m creating the labelfields like,

String[] labels = {------};

for( int i=0;labels.length;i++)
{

       LabelField labelField = new LabelField(labels[i],Field.FOCUSABLE|Field.ACTION_INVOKE){ 

       public void paint(Graphics g) {
       -------
       -------
       }

       protected void layout( int width, int height ){   

             super.layout(Display.getWidth()/3, getContentHeight());                        
             setExtent(Display.getWidth()/3, getContentHeight());
             //setPosition(Display.getWidth()/3,0);
};

HFM.add(labelField);

}

But it is not coming in the format I want.

How to do it? am I doing something wrong in Field's layout()? Please correct me if I am wrong.

enter image description here

I am attaching the screenshot of what I am getting now, but the alignment I want is 1st LabelField to the Left of HFM, 2nd at the Centre and 3rd at the Right of HFM, but only the thing is I am getting the LabelTexts from a String[].

Upvotes: 0

Views: 754

Answers (1)

AK Joshi
AK Joshi

Reputation: 867

         According to your requirement , this Sample class will help you .. 

        import net.rim.device.api.ui.*;

        public class JustifiedEvenlySpacedHorizontalFieldManager extends Manager 
        {
            private static final int SYSTEM_STYLE_SHIFT = 32;

            public JustifiedEvenlySpacedHorizontalFieldManager() 
            {
                this( 0 );
            }

            public JustifiedEvenlySpacedHorizontalFieldManager( long style ) 
            {
                super( USE_ALL_WIDTH | style );
            }

            protected void sublayout( int width, int height )
            {
                int availableWidth = width;

                int numFields = getFieldCount();
                int maxPreferredWidth = 0;
                int maxHeight = 0;


                // There may be a few remaining pixels after dividing up the space
                // we must split up the space between the first and last buttons
                int fieldWidth = width / numFields;
                int firstFieldExtra = 0;
                int lastFieldExtra = 0;

                int unUsedWidth = width - fieldWidth * numFields;
                if( unUsedWidth > 0 ) {
                    firstFieldExtra = unUsedWidth / 2;
                    lastFieldExtra = unUsedWidth - firstFieldExtra;
                }

                int prevRightMargin = 0;

                // Layout the child fields, and calculate the max height
                for( int i = 0; i < numFields; i++ ) {

                    int nextLeftMargin = 0;
                    if( i < numFields - 1 ) {
                        Field nextField = getField( i );
                        nextLeftMargin = nextField.getMarginLeft();
                    }

                    Field currentField = getField( i );
                    int leftMargin = i == 0 ? currentField.getMarginLeft() : Math.max( prevRightMargin, currentField.getMarginLeft() ) / 2;
                    int rightMargin = i < numFields - 1 ? Math.max( nextLeftMargin, currentField.getMarginRight() ) / 2 : currentField.getMarginRight();
                    int currentVerticalMargins = currentField.getMarginTop() + currentField.getMarginBottom();
                    int currentHorizontalMargins = leftMargin + rightMargin;

                    int widthForButton = fieldWidth;
                    if( i == 0 ) {
                        widthForButton = fieldWidth + firstFieldExtra;
                    } else if( i == numFields -1 ) {
                        widthForButton = fieldWidth + lastFieldExtra;
                    }
                    layoutChild( currentField, widthForButton - currentHorizontalMargins, height - currentVerticalMargins );
                    maxHeight = Math.max( maxHeight, currentField.getHeight() + currentVerticalMargins );

                    prevRightMargin = rightMargin;
                    nextLeftMargin = 0;
                }

                // Now position the fields, respecting the Vertical style bits
                int usedWidth = 0;
                int y;
                prevRightMargin = 0;
                for( int i = 0; i < numFields; i++ ) {

                    Field currentField = getField( i );
                    int marginTop = currentField.getMarginTop();
                    int marginBottom = currentField.getMarginBottom();
                    int marginLeft = Math.max( currentField.getMarginLeft(), prevRightMargin );
                    int marginRight = currentField.getMarginRight();

                    switch( (int)( ( currentField.getStyle() & FIELD_VALIGN_MASK ) >> SYSTEM_STYLE_SHIFT ) ) {
                        case (int)( FIELD_BOTTOM >> SYSTEM_STYLE_SHIFT ):
                            y = maxHeight - currentField.getHeight() - currentField.getMarginBottom();
                            break;
                        case (int)( FIELD_VCENTER >> SYSTEM_STYLE_SHIFT ):
                            y = marginTop + ( maxHeight - marginTop - currentField.getHeight() - marginBottom ) >> 1;
                            break;
                        default:
                            y = marginTop;
                    }
                    setPositionChild( currentField, usedWidth + marginLeft, y );
                    usedWidth += currentField.getWidth() + marginLeft;
                    prevRightMargin = marginRight;
                }
                setExtent( width, maxHeight );
            }

        }

        please have a look on this link :-
       [http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276][1]
        you will get all kinds of Custom Components 
        Cheers ..!!!





  [1]: http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276

Upvotes: 1

Related Questions