【问题标题】:BorderLayout.SOUTH component always shown on Android when editing text field in Codenameone在 Codenameone 中编辑文本字段时,BorderLayout.SOUTH 组件始终显示在 Android 上
【发布时间】:2018-09-11 12:47:20
【问题描述】:

我在 Android 上遇到问题,但在 IOS 上没有问题。 我有一个基本屏幕,其中在可滚动的 Y_AXIS 容器中有 10 个 TextField;我把它放在下面的 BorderLayout.CENTRE 容器上。 然后我在同一个基本容器中但在 BorderLayout.SOUTH 中有一个 Button。

当用户点击任何TextField,编辑它时,键盘显示并放置BorderLayout.SOUTH的内容,即。键盘上方的按钮隐藏了一些字段。我希望 Button 根据 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】:

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

    在 iOS 上,当键盘打开时滚动区域会增大。由于该按钮被排除在滚动区域之外,因此它始终可见。同样,这是设计使然,例如它可以在视图中保留一个“确定”按钮,这可能是所需的行为。

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

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

    【讨论】:

    • 从我投入这件事开始,很高兴知道我不会发疯。我将重新设计一个可滚动的 Y 轴作为公共基础容器,并在字段下方的视图中放置“下一步>”类型的按钮。在页面很大的地方,我将使用工具栏中的命令按钮。我一直觉得页面底部的按钮比工具栏看起来更友好,因此我不愿把它放在那里。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多