PlayN / Tripleplay как создать две кнопки в разных местах экрана

Легко создать кнопку или группу кнопок,

    Root root = iface.createRoot(AxisLayout.vertical(), ROOT, modeLayer).
            setStyles(make(VALIGN.top, HALIGN.right)).
            setBounds(0, 0, width, height).
            add(backButton);

Однако я не мог понять, как создать две кнопки в другой группе, то есть одну кнопку в ВЕРХНЕМ ЛЕВОМ и кнопку в ВЕРХНЕМ ПРАВОМ...

Я попытался создать два корня, одна кнопка будет отключена / неактивна. если я создам один корень, они будут сгруппированы вместе :(

============ Спасибо samskivert за подробный ответ, но я не могу дать правильный результат. Для первого предложения в «исходном» ответе полный код, как показано ниже:

    Font SMALL = PlayN.graphics().createFont("Helvetica", Font.Style.PLAIN, 24);
    final Stylesheet ROOT = SimpleStyles.newSheetBuilder().
            add(Element.class, make(FONT.is(SMALL))).
            add(Button.class, make(BACKGROUND.is(Background.solid(100)))).create();

    Group group = new Group(AxisLayout.vertical()).add(
            new Group(AxisLayout.horizontal(), Style.HALIGN.left).add(
                    new Button("Upper left")),
            AxisLayout.stretch(new Shim(1, 1)),
            new Group(AxisLayout.horizontal(), Style.HALIGN.right).add(
                    new Button("Lower right")));

    iface.createRoot(AxisLayout.vertical(), ROOT, modeLayer)
            .setBounds(0, 0, 960, 640)
            .add(group);

он создает этот экран (т. е. все по центру, а не вверху слева/внизу вниз...) enter image  описание здесь

Для второго варианта полный код, как показано ниже: Font SMALL = PlayN.graphics().createFont("Helvetica", Font.Style.PLAIN, 24);

    final Stylesheet ROOT = SimpleStyles.newSheetBuilder().
            add(Element.class, make(FONT.is(SMALL))).
            add(Button.class, make(BACKGROUND.is(Background.solid(100)))).create();

    Group group = new Group(new BorderLayout()).add(
      new Group(AxisLayout.horizontal(), Style.HALIGN.left).
        setConstraint(BorderLayout.NORTH).add(
              new Button("Upper left")),
      new Group(AxisLayout.vertical(), Style.HALIGN.right).
        setConstraint(BorderLayout.SOUTH).add(
              new Button("Lower right")));

    iface.createRoot(AxisLayout.vertical(), ROOT, modeLayer)
            .setBounds(0, 0, 960, 640)
            .add(group);

он создает этот снимок экрана (т.е. он центрирован и перекрывается...) введите описание изображения здесь

Еще раз спасибо.


person mamamia    schedule 26.05.2012    source источник


Ответы (1)


РЕДАКТИРОВАТЬ: К сожалению, теперь я вижу, что вам нужны верхний левый и верхний правый, а не верхний левый и нижний правый. Желаемая конфигурация еще проще. Просто вставьте растянутую прокладку между кнопками:

iface.createRoot(AxisLayout.vertical().offStretch(), ROOT, modeLayer).
  setBounds(0, 0, width, height).
  add(new Group(AxisLayout.horizontal()).add(
    new Button("Upper-left"),
    AxisLayout.stretch(new Shim(1, 1)),
    new Button("Upper-right")));

ОРИГИНАЛЬНЫЙ ОТВЕТ:

AxisLayout размещает все свои элементы в виде (горизонтальной или вертикальной) линии. Все они должны быть рядом друг с другом с настраиваемым промежутком между ними. Если вы хотите выполнить желаемый макет с помощью AxisLayout, вам нужно использовать вложенные группы, например:

+---------------------------------------+
|+-------------------------------------+|
|| [Button]    left-aligned AxisLayout ||
|+-------------------------------------+|
|                                       |
|        [stretched shim widget]        |  <-- vertical AxisLayout
|                                       |
|+-------------------------------------+|
|| right-aligned AxisLayout   [Button] ||
|+-------------------------------------+|
+---------------------------------------+

В коде это выглядит так:

Group group = new Group(AxisLayout.vertical()).add(
  new Group(AxisLayout.horizontal(), Style.HALIGN.left).add(
    new Button("Upper left")),
  AxisLayout.stretch(new Shim(1, 1)),
  new Group(AxisLayout.horizontal(), Style.HALIGN.right).add(
    new Button("Lower right")));

Вы также можете использовать BorderLayout, чтобы избежать прокладки посередине:

Group group = new Group(new BorderLayout()).add(
  new Group(AxisLayout().horizontal(), Style.HALIGN.left).
    setConstraint(BorderLayout.NORTH).add(
      new Button("Upper left")),
  new Group(AxisLayout.vertical(), Style.HALIGN.right).
    setConstraint(BorderLayout.SOUTH).add(
      new Button("Lower right")));
person samskivert    schedule 26.05.2012
comment
Привет, большое спасибо за ответ, но я не мог заставить его работать именно так, как я хотел. Я не мог опубликовать снимок экрана в комментарии, поэтому я расширил свой вопрос, кстати, я использую Tripleplay-1.3, спасибо. - person mamamia; 27.05.2012