2011-02-24 60 views

回答

3

一個快速反應將是否定,但讓我解釋爲什麼,並建議無效的工作;

屏幕實際上並沒有處理將字段放置到自己身上的問題,爲此他們可以對代理經理進行刪除,該經理可以是任何類型的經理,垂直,水平等。問題是所有經理都開始從頂部繪畫自己剩下。對於從底部開始繪製字段的管理員來說,它必須知道底部所在的位置,並添加組件而不是向下,這與管理器類中的所有低級代碼相反。您可以在BlackBerry API documentation上閱讀更多經理信息。

雖然通過調整添加字段和使用字段樣式的方式,仍然可以達到與此類似的效果。例如考慮以下代碼:

add(new LabelField("field 1")); 
    add(new LabelField("field 2")); 

這會給我們結果;

field 1 
field 2 

因爲字段1被吸入然後字段2在其下方。然而,如果我們總是在我們的經理開始時插入字段,例如位置0像這樣:

insert(new LabelField("field 1", FIELD_BOTTOM), 0); 
    insert(new LabelField("field 2", FIELD_BOTTOM), 0); 

我們會得到結果;

field 2 
field 1 

這是你在你的問題中描述的畫面所期望的結果。

雖然我不確定如何將字段繪製到屏幕底部,但您可以嘗試研究「位置相對底部」樣式,但我確實不確定。

1

您可能正在使用一個VerticalFieldManager,並在該文件說:

垂直場經理勾畫出頂部 領域底部在一個 列。

所以,如果你

manager.add(field1); 
manager.add(field2); 
manager.add(field3); 

屏幕上的字段的順序將是公正的。 但是你可以做這樣的事情:

Vector v = new Vector(); 
v.add(field1); 
v.add(field2); 
v.add(field3); 
for(int i=v.size()-1;i>=0;i--) { 
    manager.add((Field)v.elementAt(i)); 
} 
1

排序的。您可以使用Manager#insert(Field,int)方法,並始終在零索引處插入。如果使用VerticalFieldManager執行此操作,它將模擬從管理器向下自動添加字段。

1

到目前爲止一些答案是使用Manager.insert(Field,int),並繼續插入位置0.這將工作,但插入的運行時間是線性的,已添加到管理者。這意味着該解決方案將具有整體二次運行時間。如果您在10個字段之內添加,則不算什麼大問題,但如果您計劃添加更多,插入開銷將會很大。

如果您可以從上到下進行插入,通過按照Muger的解決方案建議的方式重新排序字段,運行時間將大大提高。

最後,您可以編寫自己的BottomUpVerticalFieldManager,以您想要的方式進行佈局。當你寫自己的經理時,你可以以任何方式佈置字段。在這種情況下,它將是自下而上的。編寫自己的經理似乎令人望而生畏,但在試圖解決佈局問題時,它會給你相當大的自由。