0

我在 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 的 layout() 中做错了吗?如果我错了,请纠正我。

在此处输入图像描述

我附上了我现在得到的屏幕截图,但我想要的对齐方式是第一个 LabelField 到 HFM 的左侧,第二个在中心,第三个在 HFM 的右侧,但唯一的问题是我从一个细绳[]。

4

1 回答 1

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
于 2012-10-02T08:00:30.503 回答