我創建了一個自動計算寬度的ButtonField。該按鈕的寬度將根據父級的HorizontalFieldManager(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下做錯了什麼?謝謝!
謝謝你的嘗試。您的結果很有趣,因爲我在兩臺實際設備以及模擬器上看到了它。我會繼續挖掘,看看它是否與特定版本的操作系統有關。 謝謝! – PatrickSteele 2010-01-12 01:37:08