2010-01-08 60 views
-1

我創建了一個自動計算寬度的ButtonField。該按鈕的寬度將根據父級的Horizo​​ntalFieldManager(HFM)中的其他按鈕的數量確定。所以如果有3個按鈕,每個按鈕將約爲寬度的33%。如果有5個按鈕,每個按鈕的寬度約爲20%等等......基本上,所有按鈕的寬度都相同。Blackberry - getPreferredWidth在4.5中被忽略?

下面的代碼在JDE 4.7下正常工作(使用Storm模擬器進行測試)。但是當在JDE 4.5(8330模擬器)下運行時,我的getPreferredWidth()值似乎被忽略。兩臺設備的顯示寬度爲320,我將4個按鈕添加到HFM。寬度計算在80,每個按鈕在80以下。在4.5下,我得到約96個3個按鈕,最後一個約24個。

每個按鈕中的文本都不同,所以這可能會導致問題。代碼如下:

public class AutoWidthButtonField extends ButtonField 
{ 
    AutoWidthButtonField(String label, long style) { super(label, style); } 

    public int getPreferredWidth() 
    { 
     Manager parent = this.getManager(); 
     int fields = parent.getFieldCount(); 

     int width = (Display.getWidth()/fields); 
     return width; 
    } 

    /* 
    protected void layout(int width, int height) 
    { 
     super.layout(width, height); 
     setExtent(getPreferredWidth(), getPreferredHeight()); 
    } 
    */ 
} 

現在佈局被註釋掉了,但它不會改變行爲。我使用它是這樣的:

HorizontalFieldManager nav = new HorizontalFieldManager(); 
nav.add(new AutoWidthButtonField("B1", ButtonField.CONSUME_CLICK)); 
nav.add(new AutoWidthButtonField("Opt 2", ButtonField.CONSUME_CLICK)); 
nav.add(new AutoWidthButtonField("Test", ButtonField.CONSUME_CLICK)); 
nav.add(new AutoWidthButtonField("...", ButtonField.CONSUME_CLICK)); 

我在4.5下做錯了什麼?謝謝!

回答

1

我在4.7,4.6,4.5和4.3上試過了你的代碼,你的getPreferredWidth()方法返回了預期的結果。我猜你的模擬器有問題。舉個例子,我通過HTTP連接到這個模擬器「BlackBerry Device Simulators v4.5.0.81」,但是這個「BlackBerry Device Simulators v4.5.0.52(8310)」沒有問題。

注:我在Eclipse插件的Eclipse &中測試了您的代碼。

+0

謝謝你的嘗試。您的結果很有趣,因爲我在兩臺實際設備以及模擬器上看到了它。我會繼續挖掘,看看它是否與特定版本的操作系統有關。 謝謝! – PatrickSteele 2010-01-12 01:37:08