2017-07-17 12 views
0

ボタン、テキストフィールド、画像を設定して、シミュレータIPhone6を完璧に見ています。 それから、私は実際のIPhone 6に載せましたが、いくつかの違いがあります。 画像が中央ではなく、一方のボタンが外側にあります。 GUIビルダーなしで手作業でプログラムします。 ボタン、ラベル、テキストフィールドを設定する最も良い方法は... が正しくハードウェアに配置されるようにすることですか?シミュレータは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); 

画像は24ビットカラーで629x810ピクセルです。 これはログインするスプラッシュスクリーンです。

写真:

Simulator picture

Iphone 6 picture

EDIT チェン、これは私が試したものです。それはあなたが意味するものですか?効果的にレイアウトマネージャを使用して、このビデオhttps://www.codenameone.com/how-do-i---positioning-components-using-layout-managers.htmlをチェックアウトレイアウト位置決めポータビリティを理解することが

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

(常にミリを使用)コンポーネント上setUIID()を使用し、テーマに余白および/またはパディングを調整これと異なるサンプルは、この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の中心) - 南
        • ボタン

あなたが空間にしたい/必要な場合は、コンポーネントは、我々は写真やいくつかのコードが必要になります

+0

私はあなたのヒントでそれを修正しようとします。非常に便利です。経験豊かな情報をありがとう。 – orgen

1

また、画像がさまざまなサイズに適応することを可能にするマルチ画像をチェックしてください。

+0

私はまだあなたが与えたリンクをチェックします。 質問しているサンプルコードが問題になりました。 ところで、大いに助けてくれてありがとう! – orgen

+0

陳の答えが問題を解決しましたか?もしそうなら、それを受け入れるか、質問を明確にするように依頼する必要があります。 –

+0

Shai、私はChensのヒントでそれをコード化しようとしています。しかし、これは現時点でコード化する唯一のプロジェクトではありません。 – orgen

関連する問題