在Codenameone中编辑文本字段时,BorderLayout.SOUTH组件始终显示在Android上

问题描述 投票:1回答:1

我在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;
    }
}
android codenameone
1个回答
1
投票

将UI设置为边框布局时,将隐式禁用滚动。这很好,因为每个轴的层次结构中只能有一个可滚动元素。

在iOS上,当键盘打开时,滚动区域会增长。由于按钮从滚动区域中排除,因此它始终可见。这又是设计的,例如它可以在视图中保持“OK”按钮,这可能是所需的行为。

如果您不想要这种行为,则需要使用可滚动容器。不幸的是,当UI可滚动时,很难实现将按钮放在屏幕底部的功能。

当UI可滚动时,我们的系统很难检测到屏幕底部,因为层次结构大小可以动态变化,底部可以在任何地方。这可能适用于新的GUI构建器的分层布局,这是非常精细的。

© www.soinside.com 2019 - 2024. All rights reserved.