2016-08-26 2 views
2

Как я могу указать, что элемент экрана (кнопка, метка, изображение и т. Д.) Отображаются в определенном месте на экране по пикселю или относительной позиции? Например следующие гипотетические случаи:Укажите абсолютное положение элемента GUI в CN1

  1. Элемент быть сосредоточены на пиксель 350X 500y
  2. Элемент для размещения 65% вниз по экрану, а 40% через дорогу от левого края и занимают 30% ширину экрана.
  3. Элемент B для размещения 25 пикселей справа от элемента А

Я смотрел несколько видео учебника по GUI строители & менеджера компоновки и прочитать несколько частей руководства разработчиков, но не может видеть, как эти, казалось бы, основные задачи.

ответ

1

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

Размещение вещей на основе пикселей или даже провалов не имеет смысла в мобильных устройствах, где разрешение/плотность могут радикально измениться, например. ваше приложение должно хорошо выглядеть на iPhone 3gs 320x480 или 480x320 (что сделает вариант 1 неуместным), а затем он должен выглядеть прилично на iPad pro 2732x2048, а разница в плотности составляет 3 раза, что означает, что любой стандартный пиксель будет выглядеть на 3 раза меньше на iPad профи!

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

Как ваши очки:

  1. Вы можете сделать это во многих отношениях все из которых являются неправильными, поскольку они сломают на различных устройствах , Вы можете реализовать свой собственный менеджер компоновки как explained in the developer guide. Вы также можете использовать маржу в пикселях/миллиметрах, чтобы переместить компонент в нужное положение.

  2. Тот же ответ, что и в качестве маржи, поддерживает процент, миллиметры и пиксели. Чтобы определить ширину/высоту, просто переопределите метод calcPreferredSize(), но опять же это проблематичное понятие, так как вы можете столкнуться с тем, что плотность значительно меняет размер изображения/шрифта ...

  3. Это допустимое использование полей, хотя я бы использовал что-то как 3-4 миллиметра, так что он будет выглядеть согласованно между устройствами.

+0

Спасибо. Я получаю вашу точку зрения, связанную с широко варьируемыми размерами экрана и разрешениями. Однако, если знать размеры экрана, можно определить конкретную позицию x, y для элемента, который будет помещен в. Должен ли я считать, что единственный способ сделать это в CN1 без специального менеджера макетов - использовать поля? Предположим, что элемент имеет динамический размер. Маржа была бы менее полезна, так как она указывает местоположение края объекта, а не центра. Мы могли бы вычислить, где ребро основано на текущем размере элемента. Если доступно, но это чувствует себя немного kludgey. – SolStack

+0

«Предположим, что знаете размеры» можно было бы сформулировать как «предположим, что Codename One был разработан для поддержки совершенно другой платформы». Мы разработали Codename One, чтобы сделать разумные варианты использования легкими, но все возможно. Создание легкого позиционирования X/Y не имеет смысла для 99% случаев использования, поэтому сделать что-то, что не имеет смысла, «элегантно» не входит в устав.Поскольку Codename One был разработан для мобильных устройств, мы рассматривали его с первого дня с вращением устройства и с широким разбросом плотности. Переменные размеры именно поэтому я объяснил, что вы не можете делать абсолютное позиционирование, поэтому я не получаю ваш комментарий. –

+0

FYI, если вы связываетесь, чтобы достичь определенного макета, и у вас есть проблема с его достижением (пытаясь прототипировать его с абсолютными позициями), я предлагаю курс реверсирования и задаю вопрос, охватывающий макет, который вы пытаетесь достичь, например. Я пытаюсь сделать это «(это макет/скриншот) в Codename One. Как мне это сделать? –

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