情景
在屏幕我有2個管理器:1)菜單管理器在頂部和2),其具有信息/按鈕元素體管理器。菜單管理器執行自定義繪圖,以便其菜單元素(LabelFields)的間距適當。黑莓 - 更新屏幕變化經理的繪製順序其域元素
核心問題 - 管理器和子場描繪順序
屏幕繪製除了當用戶預成型件的動作(點擊一個按鈕)微細導致withing主體管理器的元件被添加/移除。一旦將字段元素添加到主體中或從主體中刪除,菜單的繪製順序就會混淆在一起。
當身體管理器添加或刪除的字段,,而不是菜單管理器繪圖自身,然後它的子元素(標籤字段),則菜單管理器開始繪製它的子元素,然後本身;從而在標籤字段的頂部繪畫,使它們看起來像已經消失。
評論
已經嘗試過無效和其他選項 - 我試着打電話從身體添加/刪除域元素後無效,invalidateall,updateDisplay ...。一切都沒有成功。
刪除自定義子文件工作 - 我可以解決此問題的唯一方法是刪除菜單管理器自定義子文件邏輯。不幸的是,菜單系統然後以傳統的方式繪製,並沒有提供足夠的間距。
下面是菜單管理器的子佈局代碼,我在這裏錯過了什麼嗎?
public void sublayout(int iWidth, int iHeight)
{
final int iNumFields = getFieldCount();
int maxHeight = 0;
final int segmentWidth = iWidth/iNumFields;
final int segmentWidthHalf = segmentWidth/2;
for (int i = 0; i < iNumFields; i++)
{
final Item currentField = (Item)this.getField(i);
// 1. Use index to compute bounds of the field
final int xSegmentTrueCenter = segmentWidth * i + segmentWidthHalf;
// 2. center field inbetween bounds using field width (find fill width of text)
final int xFieldStart = xSegmentTrueCenter - currentField.getFont().getAdvance(currentField.getText())/2;
// set up position
setPositionChild(currentField, xFieldStart, getContentTop() + MenuAbstract.PADDING_VERTICAL);
// allow child to draw itself
layoutChild(currentField, iWidth, currentField.getHeight());
// compute max height of the field
//int fieldheight = currentField.getHeight();
maxHeight = currentField.getHeight() > maxHeight
? currentField.getHeight() + 2 * MenuAbstract.PADDING_VERTICAL
: maxHeight;
}
this.setExtent(iWidth, maxHeight);
}
最終問題
最後,我想保持菜單管理器的自定義佈局,同時允許重繪域元素。這裏是我的最後一個問題:
你有沒有體驗過這個?
當字段元素被添加/刪除到屏幕時,爲什麼菜單管理器開始以錯誤的順序繪圖?
是否本地Manager.sublayout()這樣做,我不是維護繪製順序的東西嗎?
感謝您的意見,我會嘗試了這一點! – AtariPete 2009-06-25 17:28:09