模拟器与IPhone

时间:2017-07-17 07:27:23

标签: codenameone

我正在设置按钮,文本字段和图片,以便在模拟器IPhone6上有一个完美的外观。 然后我把它放在真正的iPhone 6上,有一些差异。 图片不在中央,一个按钮在外面一半。 我手工编程,没有gui builder。 设置按钮,标签,文本字段的最佳方法是什么呢? 正确放置在硬件上?

这里是我的示例代码:

Form dlgpass = new Form("");
    dlgpass.setLayout(new BoxLayout(BoxLayout.Y_AXIS));

    Image img2;
    try {
        img2 = Image.createImage("/xz.jpg");
        Container cco2 = BoxLayout.encloseX();
        Label llc1 = new Label(" ");
        Label llc2 = new Label(" ");

        cco2.getStyle().setMarginBottom(50);
        cco2.getStyle().setMarginTop(20);
        cco2.add(llc1).add(img2).add(llc2);
        dlgpass.add(cco2);
        Label ll4 = new Label("        ");
        Label ll5 = new Label("    ");

        Container cco3 = BoxLayout.encloseX();
        Label llc3 = new Label(„test");
        cco3.getStyle().setMarginTop(100);
        cco3.add(ll4).add(llc3).add(ll5);

        Container cco4 = BoxLayout.encloseX();
        TextField pa = new TextField("", "Password", 16, TextField.PASSWORD);
        Label ll6 = new Label("   ");
        Label ll7 = new Label("     ");
        cco4.getStyle().setMarginTop(60);
        cco4.add(ll6).add(pa).add(ll7);
        dlgpass.add(cco4);

        Button logi = new Button("          login          ");
        logi.addActionListener((e) -> chlogi(pa.getText(),ce));

        Label ll1 = new Label("              ");
        Label ll2 = new Label("        ");       
        Container cco1 = BoxLayout.encloseX();
        cco1.getStyle().setMarginTop(60);
        cco1.add(ll1).add(logi).add(ll2);
        dlgpass.add(cco1);

图片为629x810像素,24位色。 这是一个登录的Splashscreen。

图片:

Simulator picture

Iphone 6 picture

EDIT 陈,这是我试过的。这是你的意思吗?

Form dlgpass = new Form("", new BorderLayout());
            Image img2;
            img2 = Image.createImage("/xx.jpg");
            ScaleImageLabel simg = new ScaleImageLabel(img2);
            dlgpass.add(BorderLayout.CENTER, simg);
            Container cco = new Container(new BorderLayout());
            TextField pa = new TextField("", "Password", 16, TextField.PASSWORD);
            cco.addComponent(BorderLayout.NORTH,pa);
            FlowLayout flow = new FlowLayout(Component.CENTER);
            flow.setValign(Component.BOTTOM);
            Container cco1 = new Container(flow);
            Button logi = new Button("       login       ");
            logi.addActionListener((e) -> chlogi(pa.getText(),ce));
            cco1.addComponent(logi);
            cco.addComponent(BorderLayout.SOUTH,cco1);
            dlgpass.addComponent(BorderLayout.SOUTH,cco);

2 个答案:

答案 0 :(得分:2)

避免使用空格,空标签,在组件上设置边距使用布局来将组件定位在From上。 在你的用例中,我可能会做这样的事情:

  • 表格 - BorderLayout。

    • ScaleImageLabel - center
    • Container(BorderLayout) - 南
      • TextField - north
      • 集装箱(FlowLayout中心) - 南
        • 按钮

如果您需要/想要空间组件,请在组件上使用setUIID()并在主题中调整边距和/或填充(始终使用mm)

答案 1 :(得分:1)

要了解布局定位可移植性,请查看有关使用布局管理器的视频https://www.codenameone.com/how-do-i---positioning-components-using-layout-managers.html

另请查看Multi-Image,它允许图像适应各种尺寸。