Reputation: 209
I am adding multiple label fields in HFM, the text of which is coming from a String[]. Suppose there are 5 labels. I want the labels in Left, HCentre and Right of HFM. I m creating the labelfields like,
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);
}
But it is not coming in the format I want.
How to do it? am I doing something wrong in Field's layout()? Please correct me if I am wrong.
I am attaching the screenshot of what I am getting now, but the alignment I want is 1st LabelField to the Left of HFM, 2nd at the Centre and 3rd at the Right of HFM, but only the thing is I am getting the LabelTexts from a String[].
Upvotes: 0
Views: 754
Reputation: 867
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
Upvotes: 1