在下面的简单对话框中:
// 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手机上都有所体现。在此先感谢您的帮助!
答案 0 :(得分:0)
您不应该在Form
中输入,因为它会产生非常有问题的用户体验。如果您希望事物看起来像是在对话框中,您可以使用样式和布局使Dialog
感觉像Dialog
,但您不应该使用TextComponent
。
失败的原因有点复杂,但这是使用对话框的高级问题:
对话框不会隐式增长 - 这对于文本输入来说是一个很大的问题,因为组件需要空间来调整输入大小,对于动画Dialog
来说更是如此,这需要改变一些东西。 Dialog
的大小在显示时确定,这是一个大问题
这在Android上成为一个更大的问题,在输入过程中屏幕会调整大小并完全扭曲对话框。这是您在设备上看到的其中一项,因为它很难模拟虚拟键盘。
Dialog
中的可滚动性很难,文本组件需要可滚动的父级,因此您可以在各种编辑组件之间滚动
Picker组件使用{{1}}形式显示输入,这可能会与您的对话框发生冲突
对话暂停/恢复行为很难做到。应用程序最小化或发送到后台时会发生暂停/恢复。例如。假设您在对话框中输入时有来电。当你回到应用程序时,我们想要显示最后一个表单。如果我们显示对话框,它将阻止,我们无法知道要显示哪个父表单。因此,当应用程序被挂起时,对话框只会被放置在主类中生成的默认代码中。这更有意义。