情景
在屏幕我有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