Добавить компоненты графического интерфейса снизу вверх, а не сверху вниз - PullRequest
0 голосов
/ 24 февраля 2011

Можно ли добавить компоненты графического интерфейса на экран ежевики, начиная снизу, а не сверху?

Спасибо

Ответы [ 4 ]

3 голосов
/ 24 февраля 2011

Быстрый ответ был бы отрицательным, но позвольте мне объяснить, почему и предложить несколько вариантов обхода;

Экраны на самом деле не обрабатывают наложение полей на себя, для этого им нужен менеджер делегатов, который можетбыть менеджером любого типа, вертикальным, горизонтальным и т. д. Проблема в том, что все менеджеры начинают рисовать себя сверху слева.Чтобы менеджер рисовал поля, начинающиеся снизу, он должен знать точное расположение дна и добавлять компоненты вверх, а не вниз, что противоречит низкоуровневому коду внутри класса менеджера.Подробнее об менеджерах вы можете прочитать в документации BlackBerry API .

Эффект, подобный этому, все равно можно достичь, настроив способ добавления полей и играя со стилями полей.Например, рассмотрим этот код:

  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 голос
/ 24 февраля 2011

Некоторые ответы до сих пор заключаются в использовании Manager.insert (Field, int) и продолжении вставки в позиции 0. Это будет работать, но время выполнения вставки является линейным по числу элементов, уже добавленных к менеджер. Значение этого решения будет иметь общее квадратичное время выполнения. Ничего страшного, если вы добавляете менее 10 полей, но если вы планируете добавить больше, накладные расходы будут существенными.

Если вы можете сделать вставки сверху вниз, переупорядочив поля, как предполагает решение Мугера, время выполнения будет значительно улучшено.

Наконец, вы можете написать свой собственный BottomUpVerticalFieldManager, который делает макет так, как вы хотите. Когда вы пишете свой собственный менеджер, вы можете расположить поля любым удобным для вас способом. В этом случае это будет снизу вверх. Написание собственного менеджера может показаться сложным, но это даст вам значительную свободу в будущем при попытке решить проблемы с макетом.

1 голос
/ 24 февраля 2011

Вроде.Вы можете использовать метод Manager # insert (Field, int) и всегда вставлять с нулевым индексом.Если вы сделаете это с VerticalFieldManager, он будет имитировать добавление полей снизу вверх в диспетчер.

1 голос
/ 24 февраля 2011

Возможно, вы используете VerticalFieldManager, и в документации на это написано:

Вертикальный менеджер полей размещает поля сверху вниз в одном столбце.1007 * Так что если вы

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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...