代码之家  ›  专栏  ›  技术社区  ›  Think.Smart

BorderLayout.南当在Codenameone中编辑文本字段时,组件总是显示在Android上

  •  1
  • Think.Smart  · 技术社区  · 8 年前

    我在安卓上有问题,但在IOS上没有。 我有一个基本屏幕,在一个可滚动的Y轴容器中有10个文本字段;我把它放在一个BorderLayout.center中心容器在下面。 然后我有一个按钮在同一个基本容器,但在BorderLayout.南.

    因为我刚刚意识到这会发生,我现在有一些屏幕,如果我有容器和字段的某种混合,它不会发生,一些屏幕,它压扁了我的文本字段,一些屏幕,它只是隐藏了另一个字段更低,我想让用户看到。

    我已经附上一个基本页显示这一点。注意这在模拟器上是好的,因为没有显示键盘。

       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 回复  |  直到 8 年前
        1
  •  1
  •   Shai Almog    8 年前

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

    如果你不想这种行为,你需要使用一个可滚动的容器。不幸的是,当用户界面可滚动时,很难实现像将按钮放在屏幕底部这样的功能。