我对黑莓手机非常陌生,试图制作一个自定义管理器。所以我试图让布局非常简单,它会显示两个Labelfields(我可以非常容易地将它们都放到HorizontalFieldManager中,但我需要使用自定义管理器来完成此操作。)设置自定义管理器中的字段宽度
Out out should是这样的: - Hello(FirstField) User(SecondField)
这里是我的课堂我sublayout方法,扩展到经理
public MyManager() {
// construct a manager with vertical scrolling
super(Manager.VERTICAL_SCROLL);
}
protected void sublayout(int width, int height) {
Field field;
// get total number of fields within this manager
int numberOfFields = getFieldCount();
int x = 0;
int y = 0;
for (int i = 0; i < numberOfFields; i++) {
field = getField(i); // get the field
setPositionChild(field, x, y); // set the position for the field
layoutChild(field, width, height); // lay out the field
x = x + field.getHeight();
}
setExtent(width, height);
}
如果我删除此行x = x+field.getWidth();
然后两种文本(你好用户)将被重叠 (我认为这是因为x,y = 0)现在我希望我会得到field.getWidth()
将返回字段一使用的宽度,但它给我的显示宽度(这是我的想法),所以我只能在布局中看到Hello。
对于垂直定位项目,它可以正常使用y = y+field,getHeight();
,但不知道为什么getWidth
没有返回我适当的宽度值,可能是因为我误导某处以理解此问题。
我需要重写getPrefferedWidth()
方法?我也尝试过这种方法,并保持原样,但是在两个字段和其他文本之间留下少量空格(2-3)。
我认为y将在setPositionChild方法中是maxHeight。我试过了,但是它在整个屏幕上仍然只显示出一个元素。 –
@ R.j。你只在这里发布了一部分代码。字段的定义丢失 - 发布。您描述的行为可能是由使用所有可用宽度的字段造成的。在任何情况下,正如我在答复中所说的那样 - 您应该首先布置这些字段,而不仅仅是定位它们(否则,您将在它们的宽度和高度尚未确定之前尝试对它们进行定位)。 – mrvincenzo
嗨,我只在我的自定义管理器类中重写此方法,并有一个构造函数,我编辑了我的代码。 –