Codenameone 代码名一-组件组的滚动+;手风琴+;开关按钮

Codenameone 代码名一-组件组的滚动+;手风琴+;开关按钮,codenameone,Codenameone,我有一个表单(带有BoxLayout.y),它有嵌套的ComponentGroup+Accordions+切换按钮。当用户展开手风琴(在ComponentGroup内)时,切换按钮列表(在手风琴内)很长,不适合屏幕 问题是表单(由ComponentGroup+手风琴+切换按钮占据)不可滚动,我想这是因为触摸的含义不明确(可能是用于选择列表中的项目或进行滚动)。但是,我认为在用户的心目中,并没有真正的模糊性:如果用户只点击一次,那么他/她就是在选择一个项目;如果用户点击,然后移动手指而不停止点击,

我有一个表单(带有BoxLayout.y),它有嵌套的ComponentGroup+Accordions+切换按钮。当用户展开手风琴(在ComponentGroup内)时,切换按钮列表(在手风琴内)很长,不适合屏幕

问题是表单(由ComponentGroup+手风琴+切换按钮占据)不可滚动,我想这是因为触摸的含义不明确(可能是用于选择列表中的项目或进行滚动)。但是,我认为在用户的心目中,并没有真正的模糊性:如果用户只点击一次,那么他/她就是在选择一个项目;如果用户点击,然后移动手指而不停止点击,那么他/她正在尝试进行滚动。我想这是用户心目中的预期行为。。。否则,如果主组件组占据了所有屏幕,滚动就不可能了(这就是我的情况)

目前,我发现了一个部分令人不满意的解决方案,在主要组件组中添加了几毫米的填充,因此屏幕边界上几乎没有空间进行滚动。但这并不直观,因为用户通常希望能够在表单的任何位置滚动

我的问题是如何启用所有形式的滚动

下面的代码是代码结构的一个示例。实际代码是由我编写的复杂解析器生成的,该解析器根据json输入自动生成UI:

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(); 

默认情况下,
表单
内容窗格是可滚动的,除非您使用
setScrollableY(false)
明确禁用它。当您设置
BorderLayout
时,这也会隐式地为您完成。由于使用了
BoxLayout
表单的内容是可滚动的(在大多数情况下应该是滚动的)

但是,
Accordion
也是可滚动的,这意味着您有两个嵌套的可滚动组件。我很难想象你在这里看到了什么/感受到了什么,但有一个明显的错误,你错过了:

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

非常感谢,我确认问题出在两个嵌套的可滚动组件上:)