2017-07-17 65 views
0

我設置按鈕,textfields和圖片,以便有一個完美的模擬器IPhone6看。 然後我把它放在一個真正的iPhone 6上,有一些差異。 圖片不是中心的,一個按鈕是外面的一半。 我沒有gui builder手動編程。 什麼是最好的方式,設置按鈕,標籤,文本區域......以便它們正確地放置在硬件上?模擬器是不同的IPhone

這裏我的示例代碼:

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位色。 這是一個可以登錄的畫面。

的圖片:

Simulator picture

Iphone 6 picture

編輯 陳,這是我的嘗試。這是你的意思嗎?

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); 
+1

我們需要的圖片和一些代碼不同的樣本可能是因爲這個https://www.codenameone.com/blog/pixel-perfect-material-buttons.html,但基於你的描述,它更多的是密度問題。 –

+0

我將(可以)稍後提供的代碼和圖片。 當我想到[鏈接](https://stackoverflow.com/questions/42887456/codename-one-user-interface-layout-on-simulator-and-a-real-android-device-are-c?rq = 1), 有沒有辦法設置按xy座標按屏幕寬度和高度的百分比按鈕。 如果是這樣,IOS和Android等都不會出現問題。 – orgen

回答

2

避免空格,空標籤,組件上的設置邊距使用佈局將組件放置在From上。 在您的使用情況下,我可能會做這樣的事:

  • 表 - BorderLayout的。

    • ScaleImageLabel - 中心
    • 集裝箱(BorderLayout的) - 南
      • 文本字段 - 北
      • 集裝箱(的FlowLayout中心) - 南
        • 按鈕

如果你需要/想空間的組件的組件使用setUIID(),並在主題調整頁邊距和/或墊襯(總是用毫米)

+0

我會盡量用你的提示來解決它。它看起來非常有用。感謝有經驗的信息。 – orgen

1

要了解佈局定位便攜看看這個視頻https://www.codenameone.com/how-do-i---positioning-components-using-layout-managers.html上有效利用佈局管理器。

此外,檢查多圖​​像,使圖像適應各種尺寸。

+0

我仍然檢查你給的鏈接。 您要求的示例代碼現在在問題中。 順便說一句:謝謝偉大的幫助! – orgen

+0

陳小姐的答案解決了這個問題嗎?如果是這樣,你需要接受它或要求澄清問題,所以我們會知道... –

+0

Shai,請耐心等待,我嘗試用Chens提示進行編碼。但這不是目前唯一編碼的項目。 – orgen