0

BlackBerry UI では、いくつかの LabelFields を右揃えと左揃えに揃えようとしています。

このために、最上位に 1 つの VertiFieldManager を作成し、それに Horizo​​ntalFieldmanager を追加すると、すべての lalbelFields が horizo​​ntalFieldManager に追加されます。

Horizo​​ntal field Manager はコンテンツを強制的に左揃えにしています。フィールドを右側に揃えるにはどうすればよいですか?

スペーシングを試みましたが、Pixcels 解像度が異なる BB デバイスでは見栄えがよくありません。

お知らせ下さい。

4

3 に答える 3

1

このコードを試してください -

JustifiedHorizontalFieldManager j=new JustifiedHorizontalFieldManager(new NullField(),your_field, true);
add(j);

//JustifiedHorizo​​ntalFieldManager クラスを以下に示します。

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



}  
于 2012-06-11T05:33:22.937 に答える
1

残念ながら、良い解決策はありません。以前よりも小さいと思います:

HorizontalFieldManager hfm = new HorizontalFieldManager();

LabelField leftField = new LabelField("One");
hfm.add(leftField);

LabelField rightField = new LabelField("Two", LabelField.USE_ALL_WIDTH | DrawStyle.RIGHT);
hfm.add(rightField);

基本的に、2 番目のフィールドに使用可能なすべての幅領域を使用し、テキストを右揃えで描画するように要求します。LabelLField はフォーカス可能ではないため、このソリューションは問題ありません。フォーカス可能なフィールドを処理する必要がある場合は、@Signare のソリューションを使用してください。

于 2012-06-11T06:07:15.803 に答える
1

私はまだ BB の初心者ですが、Horizo​​ntalField の Long スタイルを変更しようとしましたか?

于 2012-06-10T22:51:19.237 に答える