我正在将我的Android应用移植到Codename One项目中,我的近期目标是创建一个iOS版本。
我的应用有一个masterdetail结构,在手机或平板电脑上使用时有不同的布局。
事实上当应用程序在平板电脑上以横向模式运行时,可以编辑列表中的一个元素,右侧有一个片段,也就是说,活动列表在左侧,而编辑发生在右侧的片段中。
当应用程序处于纵向模式时,无论是在平板电脑还是手机上,都会显示列表。
在手机上,编辑发生在一个单独的活动中,但片段是一样的,只是它的布局和活动的布局一样大。
有人建议我看一下KitchenSink的例子。我看到它的结构是masterdetail,但在横向和纵向模式下布局是一样的,即左边的列表和 "片段 "在两个方向都是可见的。
我想,通过自定义KitchenSink布局,根据方向和控制流程,通过编程设置列表和编辑窗格的大小,重现我的应用布局并不难。
这是正确的路径,还是有类似于Android activityfragment的代码必须遵循?
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代码?