Layout 代码名1-可滚动布局限制

Layout 代码名1-可滚动布局限制,layout,codenameone,scrollable,Layout,Codenameone,Scrollable,我已经完成了自己版本的PropertyCross演示(在演示部分提供) 我目前面临的问题是“最近搜索”区域的大小。虽然我有一个不可滚动的容器,但我可以轻松定义首选高度。由于长方体布局符合首选大小,因此一切正常,没有什么问题,即无法滚动它并查看多个结果: recentSearchContainer=新容器(新的BoxLayout(BoxLayout.Y_轴));recentSearchContainer.setPreferredH((int)(this.getContentP‌​ane().get

我已经完成了自己版本的PropertyCross演示(在演示部分提供)

我目前面临的问题是“最近搜索”区域的大小。虽然我有一个不可滚动的容器,但我可以轻松定义首选高度。由于长方体布局符合首选大小,因此一切正常,没有什么问题,即无法滚动它并查看多个结果:

recentSearchContainer=新容器(新的BoxLayout(BoxLayout.Y_轴));recentSearchContainer.setPreferredH((int)(this.getContentP‌​ane().getHeight()*0.1f))

一旦我将容器设置为可滚动,首选的高度就会被覆盖,并占用它所需的空间,从它上面的BorderLayout中心部分占用了太多空间

如何操作可滚动组件的首选大小


您不需要操纵首选大小。滚动条会占用更多的空间,因此如果您需要滚动条占用特定的空间,则需要使用正确的布局类型,在本例中可能不是边框布局


边界布局为北/南元素提供了它们的首选高度,这可能不是您想要的高度。您可能需要将高度分成50/50的栅格布局。您可能需要一个表格布局,其中可以定义百分比等高度。

对于感兴趣的人,以下是解决方案:

  • 使用单列和所需的行数设置表格布局(类似于框布局y轴或边框布局,只显示北、中、南)

  • 将表格布局设置为不可滚动,使其默认为屏幕的100%

  • 添加应占据屏幕高度%的组件

  • 这些组件可以滚动,并且仍将坚持高度约束

    // inside a form object, setup the layout
    TableLayout tl = new TableLayout(3, 1);
    tl.setGrowHorizontally(true);
    setScrollable(false);
    setLayout(tl);
    ...
    // and add stuff to it
    add(tl.createConstraint().heightPercentage(15), labelDesc);
    add(tl.createConstraint().heightPercentage(50), compGroup);
    add(tl.createConstraint().heightPercentage(35), recentSearchContainer);
    
  • 工作起来很有魅力