BlackBerry HorizontalFieldManager,两侧有两个按钮



我有一个HorizontalFieldManager,里面有两个按钮。按钮需要分别放在屏幕的最左边和最右边。我知道HorizontalFieldManager只从左到右排列,所以我必须扩展它们。

这是我所做的,但没有结果。按钮确实出现,但太小,上面没有文本(我已经设置了)。

这是我的布局代码。

protected void sublayout(int width, int height) {
    setPositionChild(getField(0), 0, 0);        
    int fieldZeroWidth   = Max(getField(0).getContentWidth(),getField(0).getPreferredWidth());
    int fieldZeroHeight  = Max(getField(0).getContentHeight(),getField(0).getPreferredHeight());
    layoutChild(getField(0), 
            fieldZeroWidth, 
            fieldZeroHeight);
    int fieldOneWidth = Max(getField(1).getContentWidth(),getField(1).getPreferredWidth());
    setPositionChild(getField(1), 
            Display.getWidth() - fieldOneWidth,
            0);
    int fieldOneHeight = Max(getField(1).getPreferredHeight(),getField(1).getContentHeight());
    layoutChild(getField(1), 
            fieldOneWidth, 
            fieldOneHeight
            );
    setExtent(Display.getWidth(), Max(getPreferredHeight(),fieldOneHeight,fieldZeroHeight));
}

在我创建了这个自定义管理器之后,我用setStatus()函数将其添加到底部。

我希望这两个按钮出现在相反的一侧(它们确实这样做了),但大小合适,并显示它们的文本。

谢谢显然,Max函数只是返回参数之间的最大值。

如果你想把两个字段放在HorizontalFieldManager的角落里,请使用以下代码:

import net.rim.device.api.ui.*;
/**
 * Custom class to place the Fields on two corners of the screen Horizontally
 */
public class JustifiedHorizontalFieldManager extends Manager
{
        private static final int SYSTEM_STYLE_SHIFT = 32;
    public Field _leftField;
    public Field _rightField;
    private boolean _giveLeftFieldPriority;
    public JustifiedHorizontalFieldManager( Field leftField, Field rightField, boolean giveLeftFieldPriority )
    {
        this( leftField, rightField, giveLeftFieldPriority, Field.USE_ALL_WIDTH );
    }
    public JustifiedHorizontalFieldManager( Field leftField, Field rightField, boolean giveLeftFieldPriority, long style )
    {
        super( style );
        _leftField = leftField;
        _rightField = rightField;
        add( _leftField );
        add( _rightField );
        _giveLeftFieldPriority = giveLeftFieldPriority;
    }
    public JustifiedHorizontalFieldManager( boolean giveLeftFieldPriority, long style )
    {
        super( style );
        _giveLeftFieldPriority = giveLeftFieldPriority;
    }
    public void addLeftField( Field field )
    {
        if( _leftField != null ) {
            throw new IllegalStateException();
        }
        _leftField = field;
        add( _leftField );
    }
    public void addRightField( Field field )
    {
        if( _rightField != null ) {
            throw new IllegalStateException();
        }
        _rightField = field;
        add( _rightField );
    }
    public int getPreferredWidth()
    {
        return _leftField.getPreferredWidth() + _rightField.getPreferredWidth();
    }
    public int getPreferredHeight()
    {
        return Math.max( _leftField.getPreferredHeight(), _rightField.getPreferredHeight() );
    }
    protected void sublayout( int width, int height )
    {
        Field firstField;
        Field secondField;
        if( _giveLeftFieldPriority ) {
            firstField = _leftField;
            secondField = _rightField;
        } else {
            firstField = _rightField;
            secondField = _leftField;
        }
        int maxHeight = 0;
        int availableWidth = width;
        availableWidth -= _leftField.getMarginLeft();
        availableWidth -= Math.max( _leftField.getMarginRight(), _rightField.getMarginLeft() );
        availableWidth -= _rightField.getMarginRight();
        layoutChild( firstField, availableWidth, height - firstField.getMarginTop() - firstField.getMarginBottom() );
        maxHeight = Math.max( maxHeight, firstField.getMarginTop() + firstField.getHeight() + firstField.getMarginBottom() );
        availableWidth -= firstField.getWidth();
        layoutChild( secondField, availableWidth, height - secondField.getMarginTop() - secondField.getMarginBottom() );
        maxHeight = Math.max( maxHeight, secondField.getMarginTop() + secondField.getHeight() + secondField.getMarginBottom() );
        availableWidth -= secondField.getWidth();
        if( !isStyle( Field.USE_ALL_HEIGHT ) ) {
            height = maxHeight;
        }
        if( !isStyle( Field.USE_ALL_WIDTH ) ) {
            width -= availableWidth;
        }
        setPositionChild( _leftField, _leftField.getMarginLeft(), getFieldY( _leftField, height ) );
        setPositionChild( _rightField, width - _rightField.getWidth() - _rightField.getMarginRight(), getFieldY( _rightField, height ) );
        setExtent( width, height );
    }
    private int getFieldY( Field field, int height )
    {
        switch( (int)( ( field.getStyle() & FIELD_VALIGN_MASK ) >> SYSTEM_STYLE_SHIFT ) ) {
            case (int)( FIELD_BOTTOM >> SYSTEM_STYLE_SHIFT ):
                return height - field.getHeight() - field.getMarginBottom();
            case (int)( FIELD_VCENTER >> SYSTEM_STYLE_SHIFT ):
                return field.getMarginTop() + ( height - field.getMarginTop() - field.getHeight() - field.getMarginBottom() ) / 2;
            default:
                return field.getMarginTop();
        }
    }

    public Field getLeftField()
    {
        return _leftField;
    }
    public Field getRightField()
    {
        return _rightField;
    }
    public void replace( Field oldField, Field newField )
    {
        if( oldField == newField ) {
            // Nothing to do
            return;
        }
        if( oldField == _leftField ) {
            _leftField = newField;
        } else if( oldField == _rightField ) {
            _rightField = newField;
        }
        add( newField );
        delete( oldField );
    }

}    

如果你想设置文本对齐,那么你必须为buttonfield&如果要将align设置为buttonfield,那么您已经为buttonfield 设置了边距

相关内容

  • 没有找到相关文章

最新更新