Приложение под кодовым названием One показывается в центрированном прямоугольнике на широких экранах - PullRequest
0 голосов
/ 27 ноября 2018

Примечание для читателей: этот вопрос относится исключительно к Codename One.

Поскольку у меня несколько целей для одного и того же приложения (Android, iOS, Javascript), которое можно запуститьна маленьких экранах (это типичный случай использования), но также и на широких экранах, я должен сделать выбор в отношении пользовательского интерфейса.

Я хочу упростить свою жизнь: моя главная цель - мобильные устройства, работающие в портретном режиме., так что ... все широкие экраны (рабочий стол и планшет) будут показывать приложение внутри вертикального прямоугольника в центре экрана.Может быть, это не лучшее решение, но оно может иметь смысл.Я полагаю, что ширина этого центрированного прямоугольника составляет 9 см (ширина моего устройства iPhone составляет около 7 см, а ширина моего устройства Android составляет около 8 см).

Итак ... как правильно это сделать?требование?

Изначально я думал, что смогу создать BaseForm с кодом, переопределяющим метод show(), установив левое и правое поле для ContentPane, LayeredPane и Toolbar перед вызовом super.show() ... но этоРешение кажется мне плохим способом, а также накладными расходами, потому что в этом случае мне нужно будет пересчитывать поля и повторную проверку BaseForm для каждого изменения размера экрана ... и, однако, это решение не будет работатьс FAB или диалогами.Так что ... это не решение.

Было бы неплохо, если бы я мог выбрать фон (изображение или цвет) для всего пространства вне центрированного прямоугольника, в котором находится приложение.

Есть идея получше?

1 Ответ

0 голосов
/ 27 ноября 2018

Вероятно, это то, что нам нужно внедрить в систему, чтобы сделать ее беспроблемной.Любой подход, который вы выберете, потребует определенной работы.

Если бы я делал что-то подобное, я бы создал специальную форму без заголовка, которая будет вашим фоном.Я бы дал ему специальный пользовательский менеджер макетов, который центрирует контент.Что-то вроде:

public CenterOneCompnentLayout class Layout {
    public void layoutContainer(Container parent) {
         if(parent.getComponentCount() == 1) {
             Component cmp = parent.getComponentAt(0);
             cmp.setWidth(convertToPixels(9));
             cmp.setHeight(parent.getHeight());
             cmp.setY(0);
             cmp.setX(parent.getWidth() / 2 - cmp.getWidth() / 2);
         }
    }

    public Dimension getPreferredSize(Container parent) {
         return new Dimension(100, 100);
    }
}

Теперь просто добавьте фактическую форму к этой фоновой форме.Остальное должно работать "как есть".Я думаю, что вам нужно было бы защититься от некоторых вещей, и возможно, что этот хак вызовет некоторые побочные эффекты из-за вложенности форм.Но в конечном итоге это должно сработать.

...