我在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;
}
}
1 回答
将UI设置为边框布局时,将隐式禁用滚动 . 这很好,因为每个轴的层次结构中只能有一个可滚动元素 .
在iOS上,当键盘打开时,滚动区域会增长 . 由于按钮从滚动区域中排除,因此它始终可见 . 这又是设计的,例如它可以在视图中保持“OK”按钮,这可能是所需的行为 .
如果您不想要这种行为,则需要使用可滚动容器 . 不幸的是,当UI可滚动时,很难实现将按钮放在屏幕底部的功能 .
当UI可滚动时,我们的系统很难检测到屏幕底部,因为层次结构大小可以动态变化,底部可以在任何地方 . 这可能适用于新的GUI构建器的分层布局,这是非常精细的 .