Codename One - Прокрутка ComponentGroup + Аккордеоны + Кнопки Переключения - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть форма (с BoxLayout.y), в которую вложены ComponentGroup + Accordions + Toggle Buttons. Когда пользователь раскрывает Аккордеоны (внутри Группы Компонентов), список кнопок-переключателей (внутри Аккордеонов) длинный и не помещается на экране.

Проблема в том, что Форма (занятая ComponentGroup + Accordions + Toggle Buttons) не прокручивается, я полагаю, потому что есть двусмысленность смысла касания (которое может быть для выбора элемента списка или для выполнения прокрутка). Но я полагаю, что в сознании пользователей нет истинной двусмысленности: если пользователь делает простое нажатие, то он / она выбирает элемент; если пользователь нажимает, а затем перемещает палец, не останавливая нажатие, он / она пытается выполнить прокрутку. Я предполагаю, что это ожидаемое поведение в сознании пользователей ... в противном случае, если основная ComponentGroup занимает весь экран, прокрутка становится невозможной (это мой случай).

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

У меня вопрос, как включить прокрутку во всей форме.

Следующий код является примером структуры кода. Фактический код генерируется сложным парсером, написанным мной, который генерирует пользовательский интерфейс автоматически из ввода json:

Form hi = new Form("Hi World", BoxLayout.y());

// Warning: you need to set the theme property "ComponentGroupBool" to true
Button button1 = new Button("Button 1", "ButtonMenuCategories");
CheckBox button11 = CheckBox.createToggle("Button 1.1");
CheckBox button12 = CheckBox.createToggle("Button 1.2");
Button button13 = new Button("Button 1.3", "ButtonMenuCategories");
CheckBox button131 = CheckBox.createToggle("Button 1.3.1");
CheckBox button132 = CheckBox.createToggle("Button 1.3.2");
CheckBox button133 = CheckBox.createToggle("Button 1.3.3");
CheckBox button14 = CheckBox.createToggle("Button 1.4");
Button button2 = new Button("Button 2", "ButtonMenuCategories");
Button button3 = new Button("Button 3", "ButtonMenuCategories");
Button button4 = new Button("Button 4", "ButtonMenuCategories");
Button button5 = new Button("Button 5", "ButtonMenuCategories");

Accordion accordion13 = new Accordion();
accordion13.addContent(button13, FlowLayout.encloseCenter(ComponentGroup.enclose(button131, button132, button133)));
Accordion accordion1 = new Accordion();
accordion1.addContent(button1, FlowLayout.encloseCenter(ComponentGroup.enclose(button11, button12, accordion13, button14)));
Accordion accordion2 = new Accordion();
accordion2.addContent(button2, new Label("Hello"));
Accordion accordion3 = new Accordion();
accordion3.addContent(button3, new Label("Hello"));
Accordion accordion4 = new Accordion();
accordion4.addContent(button4, new Label("Hello"));
Accordion accordion5 = new Accordion();
accordion5.addContent(button5, new Label("Hello"));

Container menu = FlowLayout.encloseCenter(ComponentGroup.enclose(accordion1, accordion2, accordion3, accordion4, accordion5));

hi.add(menu);
hi.show(); 

1 Ответ

0 голосов
/ 28 апреля 2018

Панель содержимого Form по умолчанию прокручивается, если вы явно не отключите ее с помощью setScrollableY(false). Когда вы устанавливаете BorderLayout, это неявно делается и для вас. Поскольку вы использовали BoxLayout, содержимое Form можно прокручивать (что должно быть в большинстве случаев).

Однако, Accordion также можно прокручивать, что означает, что у вас есть два вложенных прокручиваемых компонента. Мне трудно представить, что вы видите / чувствуете здесь, но есть одна явная ошибка, которую вам не хватает:

accordion13.setScrollableY(false);
accordion1.setScrollableY(false);
accordion2.setScrollableY(false);
//... etc ...
...