主/详细信息(活动/片段)布局,从Android移植到代号One

时间:2020-06-02 18:54:40

标签: java android codenameone porting master-detail

我要将Android应用程序移植到Codename One项目,我的近期目标是创建iOS版本。

我的应用程序具有主/详细结构,并且在手机或平板电脑上使用时具有不同的布局。

实际上,当应用程序在平板电脑上以横向模式运行时,可以在列表的右边编辑一个片段,即活动列表在左边,而编辑则在右边。片段。

当应用程序在平板电脑和手机上都处于纵向模式时,将显示列表。

在电话上,编辑是在单独的活动中进行的,但片段是相同的,只是其布局与活动的布局相同。

建议我看一下KitchenSink示例。我看到它的结构是主/细节,但在横向和纵向模式下布局都是相同的,即左侧的列表和“片段”在两个方向上都是可见的。

我认为通过自定义KitchenSink布局并根据方向和控制流程以编程方式设置列表和编辑窗格的大小来重现我的应用程序布局并不困难。

是遵循的正确路径还是必须遵循的类似于Android活动/片段代码的内容?

1 个答案:

答案 0 :(得分:0)

代号一个并没有明确的主从细节抽象,因为它实际上并不需要那么多。

厨房水槽有点简单,仅使菜单成为主要细节的一部分。在您的情况下,您将只使用几个容器来表示主要对象和详细信息。您可以将它们视为片段,但实际上它们只是android术语中的视图组。

在这里,您可以依靠厨房水槽中的代码来实现表单的此行为。加载表单后,只需写出与厨房水槽类似的逻辑即可,例如:

// I assume form has a BorderLayout and we have a static import of CN.*
if(isTablet() && !isPortrait()) {
   form.add(WEST, master);
   form.add(CENTER, detail);
} else {
   form.add(CENTER, master);
}

form.addOrientationListener(e -> {
   detail.remove();
   master.remove();
   findCommandComponent(
   if(isPortrait()) {
       form.add(CENTER, master);         
   } else {
       form.add(CENTER, detail);
       form.add(WEST, master);
   }
   form.getContentPane().animateLayout(150);
});

这里我删除了一些逻辑,例如用于事件处理/导航,但要旨相似。

也可以在此处查看相关讨论:How to structure the CN1 code for a tablet form layout?