首页 文章

Codename One的布局问题

提问于
浏览
1

此刻我'm only testing my app in the simulator (as I'在另一个线程[Errors with Codename One "Send iOS Build" and "Send Android Build"]中提到了"Send iOS Build"的问题

我遇到了一些布局问题,它没有正确使用宽度和高度 . 元素是左对齐的,有 unused space on the right side . 而且我 need to scroll up and down 而不是让所有东西都适合视觉区域 . 请看图片 .

enter image description here

enter image description here

代码是:

private final void show() {
    loginSignupForm = new Form("Company", new BoxLayout(0));
    Tabs loginSignupTabs = new Tabs();
    Style loginSignupStyle = UIManager.getInstance().getComponentStyle("Tab");
    prepareAndAddSignupTab(loginSignupTabs, loginSignupStyle);
    prepareAndAddLoginTab(loginSignupTabs, loginSignupStyle);
    loginSignupForm.add(loginSignupTabs);
    loginSignupForm.show();
}

private void prepareAndAddLoginTab(Tabs loginSignupTabs, Style loginSignupStyle) {
    loginID = new TextField();
    loginPassword = new TextField();
    Button loginButton = getLoginButton();
    Component[] loginComponents = {
            new Label("Email Address"),
            loginID,
            new Label("Password"),
            loginPassword,
            loginButton,
    };
    Container loginContainer = BoxLayout.encloseY(loginComponents);
    FontImage loginIcon = FontImage.createMaterial(FontImage.MATERIAL_QUESTION_ANSWER, loginSignupStyle);
    loginSignupTabs.addTab("Login", loginIcon, loginContainer);
}

我需要更改输入代码以获取元素:

1. expand to the maximum width (no free space on the right)
2. fit within the visual area (for top-to-bottom)

请注意,我正在对元素进行编码,因为我发现(新)GUI Builder非常难以使用 .

1 回答

  • 1

    首先,不要将常量值作为参数传递给Layouts,因为未来的Codename One更新中的值可能会发生变化,这对您来说很难调试 . new BoxLayout(0) 应为 new BoxLayout(BoxLayout.Y_AXIS) 或仅为 BoxLayout.y() .

    以上是问题出现但不是唯一的问题,因为 BoxLayout 无法识别 0 作为有效参数,因为它只有3个 X_AXIS = 1Y_AXIS = 2X_AXIS_NO_GROW = 3 .

    如果您更改上面的内容以使用 BoxLayout.Y_AXIS ,它将起作用,但从上面的屏幕截图中看,这不是最佳解决方案 .

    总之,将代码更改为:

    private final void show() {
        loginSignupForm = new Form("Company", new BorderLayout());
        Tabs loginSignupTabs = new Tabs();
        Style loginSignupStyle = UIManager.getInstance().getComponentStyle("Tab");
        prepareAndAddSignupTab(loginSignupTabs, loginSignupStyle);
        prepareAndAddLoginTab(loginSignupTabs, loginSignupStyle);
        loginSignupForm.add(BorderLayout.CENTER, loginSignupTabs);
        loginSignupForm.show();
    }
    

相关问题