Search code examples
javablackberryhorizontalfieldmanager

How to align a Text field and a button field in hfm in blackberry


I want to add a TextField and a ButtonField to a HorizontalFieldManager. Now, I am using the following code

HorizontalFieldManager hfmFieldManager = new HorizontalFieldManager(NO_VERTICAL_SCROLL | NO_HORIZONTAL_SCROLL  | USE_ALL_WIDTH);
hfmFieldManager.setPadding(5, 0, 5, 0);

VerticalFieldManager buttonFieldManager = new VerticalFieldManager(USE_ALL_WIDTH |  Field.FIELD_RIGHT);
ButtonField btnDone = new ButtonField("DONE", FIELD_VCENTER  | Field.FIELD_RIGHT);
btnDone.setMargin(0, MARGIN, 0, MARGIN);
buttonFieldManager.add(btnDone);

TextField txtField = new TextField(FIELD_VCENTER | FIELD_LEFT)/*{
    protected  void layout(int width, int height) {
        super.layout((int) (Display.getWidth() * 0.5) , getPreferredHeight());
    }
}*/;
txtField.setBorder(roundedBorder);
txtField.setBackground(BackgroundFactory.createSolidBackground(Color.WHITE));
hfmFieldManager.add(txtField);
hfmFieldManager.add(buttonFieldManager);

But it shows TextField Only. I want to show buttonfield completely at the right side and the remaining left side for textField.(Show TextField,Buttonfield from left to right).

How can i adjust the width of textfield which is compatible for all screen sizes?

Thanks in Advance


Solution

  • Try this -

    JustifiedHorizontalFieldManager j=new JustifiedHorizontalFieldManager(your_text_field,your_button_field, true);
    

    then add the field to your screen.

    //JustifiedHorizontalFieldManager class is given below

    import net.rim.device.api.ui.Field;
    import net.rim.device.api.ui.Manager;
    
    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 );
        }
    
    }