在Blackberry 5.0中的水平字段管理器中对齐标签文本

时间:2012-08-27 12:15:16

标签: blackberry blackberry-simulator blackberry-eclipse-plugin blackberry-jde

我在HFM中添加了多个标签字段,其文本来自String []。假设有5个标签。我希望HFM的Left,HCentre和Right中的标签。我正在创建类似的实验室,

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

}

但它不符合我想要的格式。

怎么做?我在Field的布局中做错了什么()?如果我错了,请纠正我。

enter image description here

我正在附上我现在所获得的截图,但是我想要的对齐方式是HFM左侧的第一个LabelField,中心的第二个和HFM右侧的第三个,但只有我得到的是LabelTexts来自String []。

1 个答案:

答案 0 :(得分:1)

         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