从下往上添加gui组件而不是自上而下

时间:2011-02-24 10:33:59

标签: blackberry

是否可以从底部而不是从顶部开始向黑莓屏幕添加gui组件?

由于

4 个答案:

答案 0 :(得分:3)

快速回复是不会让我解释为什么并建议一些工作;

屏幕实际上并不处理将字段布置到自己身上,为此,他们将代理经理视为任何类型的经理,纵向,横向等问题。问题是所有经理从左上角开始绘画自己。对于一个从底部开始绘制字段的经理,它必须知道底部所在的exaclty并添加组件而不是down,这与管理器类中的所有低级代码相反。您可以在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 :(得分: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));
}

答案 2 :(得分:1)

排序。您可以使用Manager#insert(Field,int)方法并始终在零索引处插入。如果使用VerticalFieldManager执行此操作,它将模拟自下而上向Manager添加字段。

答案 3 :(得分:1)

到目前为止,一些答案是使用Manager.insert(Field,int),并继续插入位置0.这将起作用,但插入的运行时间是已添加到的元素数量的线性经理。这意味着此解决方案将具有整体二次运行时间。如果你在10个以下的字段中添加,则没什么大不了的,但是如果你计划增加更多,那么插入开销就会很大。

如果您可以从上到下进行插入操作,通过按照Muger的解决方案建议重新排序字段,可以大大提高运行时间。

最后,您可以编写自己的BottomUpVerticalFieldManager,以您希望的方式进行布局。当您编写自己的经理时,您可以以任何方式布置这些字段。在这种情况下,它将是自下而上的。编写自己的经理可能看起来令人生畏,但在将来尝试解决布局问题时,它会为您提供相当大的自由。