2015-12-01 3 views
1

В настоящее время я создаю кодовое имя одного компонента, высота которого зависит от ширины. Codename one (Shai Almog) ответил, что это непросто сделать, алгоритмы компоновки не предназначены для решения этого требования. См. Исходный вопрос здесь. Было предложено использовать подход в компоненте Codename TextArea, но, по-видимому, этот подход не был без проблем.Вычисление предпочтительной высоты на основе фактической ширины компонента Codenameone (2)

Нет, я бы хотел решить это по другому подходу. Мне было интересно, смогут ли люди дать отзыв о том, будет ли это работать или нет. Основная идея заключается в предположении, что ширина и высота компонента Form, как наивысший компонент в иерархии, не будут зависеть от менеджера компоновки, а непосредственно от дисплея. И таким образом имеет фиксированные размеры. У формы есть дочерний объект Container contentPane, который я предполагаю, также имеет фиксированный размер. Затем мы можем создать пользовательскую форму LayoutManager, чтобы использовать эту информацию. Скажем, мы расширим от BoxLayout и перегружать ее методе layoutContainer(Container c) и getPreferredSize(Container c) использовать эту информацию, используя c.getParent().getParent() instanceof Form знать ширину и высоту (в зависимости и для пользовательского Изменяемых компоненты создают такие методы, как getPrefferedWForHeight(int height) или метод setFixedWidth(int width) INITIALIZING, что влияет на обычные getPrefferredH() и getPrefferredW() звонков .

Nicest бы расширить компоненты с использованием таких методов, как hasFixedWidth() (или совмещать ширину и высоту в одном вызове hasFixedDimension(int axis)) и widthDependsOnHeight(), что сделало бы BoxLayout независимых от жестких закодированных имен классов, но похоже, что это не может выполняются как замена Codename на один компонент с использованием

UIBuilder.registerCustomComponent("Container", nl.localhost.Container.class); 
UIBuilder.registerCustomComponent("Form", nl.localhost.Form.class); 

похоже, не имеет эффекта.

Я не думал о прокручивании или повороте устройств (и, таким образом, перекрашивал формы), но я не думаю, что это вызовет проблему. Будет ли работать вышеприведенный подход?

С наилучшими пожеланиями Марка K

+0

Возможно. Почему бы вам не попробовать? – Manu

ответ

0

Что мы делаем довольно часто в компонентах, чтобы установить предпочтительную ширину Display.getInstance().getWidth() которые «намеки» на менеджер компоновки о наших намерениях.

Когда устройство повернуто, снова вызывается calcPreferredSize(), а ширина дисплея - это физическая высота устройства.

Код регистрации, который вы использовали, относится к старому графическому дизайну. Я не совсем понимаю, почему это связано с вопросом.

+0

Итак, снова используйте 'calcPreferredSize()'. Спасибо за подсказку 'Display.getInstance(). GetWidth() Display.getInstance(). GetWidth()', для этого должно быть достаточно информации. Марк К. –

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