1

我有一個Horizo​​ntalFieldManager,裏面有兩個按鈕。按鈕需要分別放置在屏幕的最左側和最右側。我知道Horizo​​ntalFieldManager只會把它們從左到右,所以我必須擴展它們。BlackBerry Horizo​​ntalFieldManager在兩邊有兩個按鈕

這是我做的,但它沒有結果。按鈕出現,但太小,沒有文字(我已經設置)。

這是我的佈局代碼。

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函數只是返回參數之間的最大值。

+0

您的按鈕是否在任何wya中自定義? – jprofitt 2011-06-09 13:23:26

+0

我的按鈕不是自定義的。 – Orca 2011-06-09 21:42:36

回答

4

如果妳要放置在角落的兩個場Horizo​​ntalFieldManager使用以下代碼:

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



}  
+0

謝謝。我會在星期天檢查一下,然後回來看結果。 – Orca 2011-06-10 18:02:58

+0

這是完美的。謝謝 – Orca 2011-06-12 05:25:14

+0

也幫助完整鏈接.http://keraisureshvblackberry.blogspot.in/2012/02/there-are-very-common-there-there-are.html – 2012-03-02 12:51:36

1

如果你想設置文本對齊,那麼你必須設置填充爲ButtonField字段&如果要設置對齊ButtonField字段,那麼你已經設置邊距ButtonField字段

相關問題