2012-03-03 3 views
1

Я хочу разместить три VerticalFieldManager на экране с NO_VERTICAL_SCROLL. Один менеджер должен быть выровнен с TOP, один должен быть выровнен с BOTTOM, а последний должен потреблять остальную высоту между двумя предыдущими.Макет менеджера с USE_ALL_HEIGHT стилем без переопределения sublayout() в BlackBerry

Может ли это быть достигнуто без переопределения sublaout() для любого Менеджера? В результате я хочу достичь, это:

enter image description here


Я layouted этого экрана со следующим кодом. Проблема в том, что я не смог сделать это без переопределения sublayout().

public class LayoutSandboxScreen extends MainScreen { 
    public LayoutSandboxScreen() { 
     super(NO_VERTICAL_SCROLL); 

     VerticalFieldManager vfmTop = new VerticalFieldManager(USE_ALL_WIDTH); 
     vfmTop.setBackground(BackgroundFactory.createSolidBackground(Color.GREEN)); 
     vfmTop.add(new ButtonField("TOP", FIELD_HCENTER)); 

     final VerticalFieldManager vfmCenter = new VerticalFieldManager(USE_ALL_WIDTH);  
     HorizontalFieldManager hfmCenter = new HorizontalFieldManager(USE_ALL_HEIGHT | FIELD_HCENTER); 
     vfmCenter.setBackground(BackgroundFactory.createSolidBackground(Color.RED)); 
     hfmCenter.add(new ButtonField("CENTER", FIELD_VCENTER)); 
     vfmCenter.add(hfmCenter); 

     final VerticalFieldManager vfmBottom = new VerticalFieldManager(USE_ALL_WIDTH);  
     vfmBottom.setBackground(BackgroundFactory.createSolidBackground(Color.BLUE)); 
     final ButtonField btn = new ButtonField("BUTTOM", FIELD_HCENTER);   
     vfmBottom.add(btn); 

     VerticalFieldManager vfmSecond = new VerticalFieldManager(USE_ALL_HEIGHT) { 
      protected void sublayout(int maxWidth, int maxHeight) { 
       setExtent(maxWidth, maxHeight); 

       layoutChild(vfmBottom, maxWidth, maxHeight); 
       int bottomHeight = vfmBottom.getHeight(); 

       layoutChild(vfmCenter, maxWidth, maxHeight - bottomHeight); 
       setPositionChild(vfmCenter, 0, 0); 

       setPositionChild(vfmBottom, 0, maxHeight - bottomHeight); 
      } 
     }; 

     vfmSecond.add(vfmBottom); 
     vfmSecond.add(vfmCenter); 

     add(vfmTop); 
     add(vfmSecond); 
    } 
} 
+0

Я также хотел бы ответить на этот вопрос. У меня также есть экран с выровненными по нижнему краю полями и средним полем переменной высоты и должен переопределять 'sublayout()', чтобы расположить их вручную. –

+0

@ RemyLebeau-TeamB То, с чем я тоже сталкиваюсь. Я работаю на экране чата, который содержит диспетчер отправленных/полученных сообщений и другой менеджер с расширенным EditField, где пользователь записывает новые сообщения. Оба менеджера имеют переменную высоту. – mrvincenzo

+0

@MrVincenzo с использованием setStatus() на MainScreen идеально подходит для вашего текстового ввода. –

ответ

1

Поскольку вы уже используете В начало, вы пытались с помощью SETTITLE() и setStatus() для верхней и нижней VerticalFieldManager? Я думаю, что будет делать то, что вы хотите.

Редактировать

Если слишком В начале конкретно, вы можете написать свой собственный MainManager, который поддерживает те же компоненты, как макет баннер - В начале, название, основной контент, статус. Вы должны будете написать свой собственный код макета, так что вы все равно будете использовать sublayout(), которого вы специально хотели избежать. Плюсом является то, что это будет более сложным - вы не будете переопределять метод sublayout() специальным образом на случайных компонентах пользовательского интерфейса.

+0

Это не то, что я ищу. setTitle() и setStatus() хороши для конкретных случаев. Мой вопрос скорее более общий и не связан ни с одним случаем. – mrvincenzo

+0

Хотя это не совсем тот ответ, на который я надеялся, он самый близкий. Благодарю. – mrvincenzo

Смежные вопросы