Вертикальное выравнивание текста и значка - PullRequest
1 голос
/ 03 августа 2020

Сегодня я потратил два часа, пытаясь выровнять по вертикали текст кнопки toogle в нижней части значка кнопки.

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

Метод setVerticalAlignment (int valign) работает так, как ожидалось, если параметром является Component.TOP или Component.CENTER, но Component.BOTTOM действует точно так же, как Component.CENTER.

Я пробовал много обходных путей, но безуспешно. Странно, что такую ​​простую задачу трудно выполнить: я что-то упускаю? Спасибо.

Не знаю, актуально ли это, но я также использую setTextPosition (Component.RIGHT).

1 Ответ

1 голос
/ 03 августа 2020

Отредактированный ответ ...

С этим кодом немного сложно работать, и в нем так много нюансов и неправильного поведения. Обычно я просто разделяю текст и значок на отдельные метки и использую что-то вроде схемы потока:

Form hi = new Form("Big and Small", BoxLayout.y());

CheckBox toggle = CheckBox.createToggle("My Text");
toggle.setUIID("Label");
Label bigIcon = new Label("");
FontImage.setMaterialIcon(bigIcon, FontImage.MATERIAL_INFO, 10);

Container lead = FlowLayout.encloseBottomInRow(toggle, bigIcon);
lead.setUIID("ToggleButton");
lead.setLeadComponent(toggle);
hi.add(lead);

hi.show();

Обратите внимание, что в настоящее время этот код требует изменения, которое было добавлено вчера в код (ByRow метод). Сначала я думал, что это ошибка в FlowLayout, но похоже, что это всего лишь два разных способа вычисления вертикального выравнивания для контейнера.

enter image description here

To get a sense of why aligning and placing labels is so hard check out this code responsible for that: https://github.com/codenameone/CodenameOne/blob/fd2acfc10eb22f4b7a3089aeac4e967280f92b4e/CodenameOne/src/com/codename1/ui/plaf/DefaultLookAndFeel.java#L1314 -L1623

Это просто общий c код. Есть копии в нативном коде iOS и Android (для производительности).

...