Masterdetail (activityfragment)布局,从Android移植到Codename One。

问题描述 投票:1回答:1

我正在将我的Android应用移植到Codename One项目中,我的近期目标是创建一个iOS版本。

我的应用有一个masterdetail结构,在手机或平板电脑上使用时有不同的布局。

事实上当应用程序在平板电脑上以横向模式运行时,可以编辑列表中的一个元素,右侧有一个片段,也就是说,活动列表在左侧,而编辑发生在右侧的片段中。

当应用程序处于纵向模式时,无论是在平板电脑还是手机上,都会显示列表。

在手机上,编辑发生在一个单独的活动中,但片段是一样的,只是它的布局和活动的布局一样大。

有人建议我看一下KitchenSink的例子。我看到它的结构是masterdetail,但在横向和纵向模式下布局是一样的,即左边的列表和 "片段 "在两个方向都是可见的。

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

这是正确的路径,还是有类似于Android activityfragment的代码必须遵循?

java android codenameone porting master-detail
1个回答
0
投票

Codename One没有明确的master-detail抽象,因为它并没有那么多需要。

厨房水槽有点简单化,只把菜单作为主细节的一部分。在你的情况下,你只需要用几个Container来表示主和细节。你可以把这些看作是碎片,但实际上它们只是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);
});

这里有一些逻辑被我删掉了,例如: 事件处理的导航,但它的要点是相似的。

也可以参考这里的相关讨论。如何架构平板电脑表单布局的CN1代码?

© www.soinside.com 2019 - 2024. All rights reserved.