2012-02-08 31 views
0

在我的應用程序中,我必須實現從VerticalFieldManager擴展的自定義組件,並且此管理器保存的行是Horizo​​ntalFieldManager。 問題出在OS 4.5左邊的LabelField只顯示一行文字。這裏是代碼和圖像。 BB6.0 enter image description hereLabelField在OS 4.5和6.0之間的不同行爲

class Row extends HorizontalFieldManager{ 
    private LabelField key; 
    private LabelField value; 

    public Row(String left,String right){ 
     key = new LabelField(left + ": ",Field.NON_FOCUSABLE | Field.NON_SPELLCHECKABLE | TextField.NO_LEARNING | RichTextField.USE_TEXT_WIDTH){ 
      public int getPreferredWidth() { 
       return Math.min((Display.getWidth()-20)/2,super.getPreferredWidth()); 
      } 
     }; 
     key.setPadding(0, 0, 0, 10); 
     key.setFont(Fonts.NORMAL); 
     add(key); 

     value = new LabelField(right,Field.NON_SPELLCHECKABLE | TextField.NO_LEARNING | Field.FOCUSABLE); 
     value.setPadding(0, 10, 0, 0); 
     value.setFont(Fonts.BOLD); 
     add(value); 
    } 
    public int getPreferredHeight() { 
     return Math.max(key.getHeight(), value.getHeight()); 
    } 
    public int getPreferredWidth() { 
     return Display.getWidth()-20; 
    } 
    protected void sublayout(int arg0, int arg1) { 
     super.sublayout(arg0, arg1); 
     setExtent(getPreferredWidth(), getPreferredHeight()); 
    } 
} 
+0

將'LabelFields'放入'VerticalFieldManagers'內,然後將這些添加到每行的'Horizo​​ntalFieldManager'中。順便說一句,爲什麼你在密鑰的標籤中使用'RichTextField.USE_TEXT_WIDTH'? LabelField不會從rtf擴展,所以它可能會給您帶來意想不到的結果。與'TextField.NO_LEARNING'相同。 – 2012-02-08 13:59:55

+0

由於只使用了'Field.NON_FOCUSABLE'和'Field.FOCUSABLE'樣式,並將LabelFields放在VFM中,我試過並得到了相同的結果。 – 2012-02-08 14:14:49

+0

當然,它與這些標誌無關。問題在於RIM中的傢伙每次發佈都會改變行爲。 – 2012-02-08 14:25:16

回答

1

我通過把LabelFields內VFM解決了這個問題,並推翻 getPreferredHeight()sublayout()方法,如下圖所示。謝謝Mister Smith

class Row extends HorizontalFieldManager{ 
    private LabelField key; 
    private LabelField value; 

    public Row(String left,String right){ 
     VerticalFieldManager leftVfm = new VerticalFieldManager(){ 
      public int getPreferredWidth() { 
       return Math.min(getField(0).getPreferredWidth(), (Display.getWidth())/2); 
      } 
      protected void sublayout(int maxWidth, int maxHeight) { 
       super.sublayout(getPreferredWidth(), maxHeight); 
       setExtent(getPreferredWidth(), maxHeight); 
      } 
     }; 
     VerticalFieldManager rightVfm = new VerticalFieldManager(); 

     key = new LabelField(label.getLabel() + ": ",Field.FOCUSABLE); 
     key.setFont(Fonts.NORMAL); 
     leftVfm.add(key); 

     value = new LabelField(label.getRight(),Field.FOCUSABLE); 
     value.setFont(Fonts.BOLD); 
     rightVfm.add(value); 

     add(leftVfm); 
     add(rightVfm); 
    } 
    public int getPreferredHeight() { 
     if (key != null) 
      return Math.max(key.getHeight(), value.getHeight()); 
     else{ 
      return value.getHeight(); 
     } 
    } 
    public int getPreferredWidth() { 
     return Display.getWidth()-20; 
    } 
    protected void sublayout(int arg0, int arg1) { 
     super.sublayout(arg0, arg1); 
     setExtent(getPreferredWidth(), getPreferredHeight()); 
    } 
} 
相關問題