2014-03-14 44 views
1

我想將TextField和ButtonField添加到Horizo​​ntalFieldManager。現在,我正在使用以下代碼如何對齊黑莓hfm中的文本字段和按鈕字段

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

但它顯示僅TextField。我想在右側完全顯示buttonfield,在textField的左側顯示剩餘的左側(從左到右顯示TextField,Buttonfield)。

如何調整對所有屏幕尺寸兼容的文本字段的寬度?

由於提前

+1

// JustifiedHorizo​​ntalFieldManager類給您必須創建自己的經理做到這一點。作爲一個起點,看看這裏的經理們:http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276並回顧一下: http://supportforums.blackberry.com/t5/Java-Development/Create-a-custom-layout-manager-for-a-screen/ta-p/442990 –

回答

0

試試這個 -

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

然後將字段添加到您的屏幕。下面

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

}  
+0

這是高級UI樣本中包含的樣本之一,我指出上面(http://supportforums.blackberry.com/t5/Java-Development/Implement-advanced-buttons-fields-and-managers/ta-p/488276)?我認爲可以在這裏找到原始示例:https://github.com/blackberry/Samples-for-Java/blob/master/Advanced%20UI/src/com/samples/toolkit/ui/container/JustifiedHorizo​​ntalFieldManager.java –