首页 文章

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

提问于
浏览
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;
    }
}

1 回答

  • 1

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

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

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

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

相关问题