【问题标题】:Layout issue with Codename One代号一的布局问题
【发布时间】:2017-09-08 14:44:05
【问题描述】:

目前我只是在模拟器中测试我的应用程序(因为我遇到了另一个线程中提到的“发送 iOS 构建”问题 [Errors with Codename One "Send iOS Build" and "Send Android Build"

我遇到了一些布局问题,它没有正确使用宽度和高度。元素左对齐,右侧有未使用的空间。而且我需要上下滚动,而不是让所有内容都适合可视区域。请看图片。

代码是:

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 使用起来相当困难。

【问题讨论】:

    标签: codenameone


    【解决方案1】:

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

    上面是问题出现的地方,但不是唯一的问题,因为BoxLayout 不能将0 识别为有效参数,因为它只有X_AXIS = 1Y_AXIS = 2X_AXIS_NO_GROW = 3 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      相关资源
      最近更新 更多