PSD转APP应用(物质PSD)

时间:2017-01-10 19:04:06

标签: codenameone

我正在尝试在我的应用上创建一个类似城市指南登录屏幕(2)的登录屏幕:

City Guide Login Screen

我使用了以下代码作为我从Materiall Design Demo和PSD To App Revisited博客上的博客获取的表格:

        f = new Form(new BorderLayout());
    f.setUIID("loginForm");
    f.getTitleArea().setUIID("Container");
    f.getToolbar().hideToolbar();
    Label logo = new Label();
    logo.setIcon(theme.getImage("logoHolder.png"));
    Container titleContainer = Container.encloseIn(
            new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER),
            logo, BorderLayout.CENTER);
    titleContainer.setUIID("loginTitleContainer");

    TextField login = new TextField("", "Your email address", 40, TextField.EMAILADDR);
    TextField password = new TextField("", "Your password", 40, TextField.PASSWORD);
    login.getAllStyles().setMargin(LEFT, 0);
    password.getAllStyles().setMargin(LEFT, 0);
    Label loginIcon = new Label("", "TextField");
    Label passwordIcon = new Label("", "TextField");
    loginIcon.getAllStyles().setMargin(RIGHT, 0);
    passwordIcon.getAllStyles().setMargin(RIGHT, 0);
    FontImage.setMaterialIcon(loginIcon, FontImage.MATERIAL_MAIL_OUTLINE, 3);
    FontImage.setMaterialIcon(passwordIcon, FontImage.MATERIAL_LOCK_OUTLINE, 3);

    Button loginButton = new Button();
    loginButton.setIcon(theme.getImage("login_login.png"));
    loginButton.setUIID("removePadding");
    Button exitButton = new Button();
    exitButton.setIcon(theme.getImage("login_exit.png"));
    exitButton.setUIID("removePadding");
    Button forgotButton = new Button("Forgot password?");
    forgotButton.setUIID("forgotPass");

    Label vSpacer = new Label();
    vSpacer.setUIID("longVSpacer");
    Label vSpacer1 = new Label();
    vSpacer1.setUIID("longVSpacer");
    Label vSpacer2 = new Label();
    vSpacer2.setUIID("vSpacer");
    Label vSpacer3 = new Label();
    vSpacer3.setUIID("vSpacer");

    Container loginCon = BoxLayout.encloseY(
            vSpacer1,
            BorderLayout.center(login).
                    add(BorderLayout.WEST, loginIcon),
            BorderLayout.center(password).
                    add(BorderLayout.WEST, passwordIcon),
            vSpacer,
            loginButton,
            vSpacer2,
            exitButton,
            vSpacer3,
            forgotButton
    );

    f.add(BorderLayout.NORTH, titleContainer);
    f.add(BorderLayout.CENTER, loginCon);
    f.show();

现在,对于UIID,“removePadding”将所有填充设置为零,并将左边距设置为3.

vSpacer设置了顶部和底部边距,以便允许垂直的合理空间。

当我没有将文本字段添加到框布局时,一切正常,但是一旦我向框布局添加任何文本字段,北容器就会从左右收缩,并且它不会覆盖整个宽度。 / p>

但是当从框布局中删除文本字段并添加按钮时,例如北容器覆盖整个宽度。

我尝试使用按钮UIID“removePadding”填充和边距但没有运气。

以下是在边框布局中添加文本字段以及图标时我的屏幕的样子:

enter image description here

当我从盒子布局中取下文本字段并且只留下按钮时,这就是我的屏幕的样子:

enter image description here

此外,文本字段在未选择的UIID上都有下划线图像。但是当电子邮件字段未被选中时,它不会获得下划线外观,并且只有密码字段在未被选中时加下划线。这看起来像个错误!!

1 个答案:

答案 0 :(得分:0)

替换:

TextField tf = new TextField("Hello");
tf.setWidth(300);

使用:

TextField tf = new TextField("Hello", "", 5, TextField.ANY);

调用setWidth总是一个错误,布局管理器将根据在运行时确定的首选大小来调整UI的大小。在高DPI手机上300像素太小而在低DPI设备上太大。构造函数的第二种形式接受columns属性的值,该值根据字符宽度确定文本字段的宽度(例如,字母W * 5的宽度)。