InputComponents和Dialogs不兼容吗?

时间:2018-06-17 17:56:54

标签: dialog codenameone

在下面的简单对话框中:

  // choice of layout has no impact:
  Container cont=new Container(new TextModeLayout(3, 1));
  //Container cont=new Container(new BoxLayout(BoxLayout.Y_AXIS));
  TextComponent firstName=new TextComponent().label("First Name").text(person.firstname);
  TextComponent lastName=new TextComponent().label("Last Name").text(person.lastname);
  TextComponent cost=new TextComponent().label("Cost per Session").text(person.getCostString());
  cost.getField().setConstraint(TextArea.DECIMAL);
  // NOTE HERE
  // doesn't work:       // works:
  cont.add(firstName);   // cont.add(firstName.getField());
  cont.add(lastName);    // cont.add(lastName.getField());
  cont.add(cost);        // cont.add(cost.getField());
  Dialog.show("Edit Client", cont, new Command(CANCEL), new Command(OK));

除非我在NOTE HERE注释中将TextField而不是TextComponent添加到我的容器中,否则对话框中不会出现任何内容。这意味着我失去了标记输入字段的漂亮外观(是的,我知道我可以自己标记它们,但它们在不同的设备上看起来不太好)。我在顶部选择布局管理器不会影响这个问题(我已尝试了几个)。我无法在网上找到证据来断定这里存在不兼容性,添加TextComponents和其他InputComponents在Form上工作正常,而不是在Dialog中。

我在另一个使用PickerComponents的Dialog中遇到了同样的问题。 PickerComponent不会出现,除非我添加Picker本身,然后从Dialog产生的Picker看起来都错了。我希望上面更简单的代码问题也能解决这个问题。

值得注意的是,我没有对主题进行任何更改,这个问题在Android和Apple皮肤以及实际的Android手机上都有所体现。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您不应该在Form中输入,因为它会产生非常有问题的用户体验。如果您希望事物看起来像是在对话框中,您可以使用样式和布局使Dialog感觉像Dialog,但您不应该使用TextComponent

失败的原因有点复杂,但这是使用对话框的高级问题:

  • 对话框不会隐式增长 - 这对于文本输入来说是一个很大的问题,因为组件需要空间来调整输入大小,对于动画Dialog来说更是如此,这需要改变一些东西。 Dialog的大小在显示时确定,这是一个大问题

  • 这在Android上成为一个更大的问题,在输入过程中屏幕会调整大小并完全扭曲对话框。这是您在设备上看到的其中一项,因为它很难模拟虚拟键盘。

  • Dialog中的可滚动性很难,文本组件需要可滚动的父级,因此您可以在各种编辑组件之间滚动

  • Picker组件使用{{1}}形式显示输入,这可能会与您的对话框发生冲突

  • 对话暂停/恢复行为很难做到。应用程序最小化或发送到后台时会发生暂停/恢复。例如。假设您在对话框中输入时有来电。当你回到应用程序时,我们想要显示最后一个表单。如果我们显示对话框,它将阻止,我们无法知道要显示哪个父表单。因此,当应用程序被挂起时,对话框只会被放置在主类中生成的默认代码中。这更有意义。