我在Android上有问题,但不是IOS。我有一个基本的屏幕,我有一个可滚动的Y_AXIS容器内的10个TextFields;我将它放在下面的BorderLayout.CENTRE容器中。然后我在同一个基本容器中有一个Button但在BorderLayout.SOUTH中。
当用户点击任何TextField时,编辑它的情况,键盘显示并放置BorderLayout.SOUTH的内容,即。键盘上方的按钮隐藏了一些字段。我希望按照IOS将按钮隐藏在键盘下方。
因为我刚才意识到这种情况发生了,我现在有一些屏幕,如果我有一些容器和字段的混合,一些屏幕,它挤压我的文本字段,一些屏幕,它只是隐藏另一个我希望用户看到的字段更低。
我附上了一个显示此内容的基本页面。注意这在模拟器上很好,因为没有显示键盘。非常感谢
public class Keyboard {
private Form currentForm = new Form("", new BorderLayout());
public void buildPage() {
Container c = new Container(new BorderLayout());
Container y = new Container(new BoxLayout(BoxLayout.Y_AXIS));
y.setScrollableY(true);
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
y.add(new TextField());
c.add(BorderLayout.CENTER, y);
c.add(BorderLayout.SOUTH, buildButton());
currentForm.add(BorderLayout.CENTER, c);
currentForm.getAllStyles().setBgColor(0x65363);
currentForm.getAllStyles().setBgTransparency(255);
currentForm.setFormBottomPaddingEditingMode(true);
currentForm.show();
}
private Component buildButton() {
Button button = new Button("Hide this button");
return button;
}
}
将UI设置为边框布局时,将隐式禁用滚动。这很好,因为每个轴的层次结构中只能有一个可滚动元素。
在iOS上,当键盘打开时,滚动区域会增长。由于按钮从滚动区域中排除,因此它始终可见。这又是设计的,例如它可以在视图中保持“OK”按钮,这可能是所需的行为。
如果您不想要这种行为,则需要使用可滚动容器。不幸的是,当UI可滚动时,很难实现将按钮放在屏幕底部的功能。
当UI可滚动时,我们的系统很难检测到屏幕底部,因为层次结构大小可以动态变化,底部可以在任何地方。这可能适用于新的GUI构建器的分层布局,这是非常精细的。