2017-01-03 40 views
1

我注意到有時內容窗格在初始化後會改變它的大小,並想知道爲什麼會這樣。ContentPane在初始化後更改大小 - 爲什麼?

下面是一些代碼在模擬器上證明這一點 - 在模擬器中運行它並觀察輸出 - 更小的皮膚有小的差異:

public class FormScrollExtras extends Form { 
    private int entrytally = 0; 
    private Runnable runnableLog = null; 

    public FormScrollExtras() { 
     setTitle("FormScrollExtras"); 
     setScrollable(false); 
     setTensileDragEnabled(false); 
     Container contentPane = getContentPane(); 
     contentPane.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); 
     contentPane.setScrollableY(true); 
     contentPane.setTensileDragEnabled(false); 
     TextArea textArea = new TextArea("This form logs the content panes height and layoutHeight - right after init and whenever an entry is created."); 
     textArea.setEditable(false); 
     contentPane.add(textArea); 
     FloatingActionButton floatingActionButton = FloatingActionButton.createFAB(FontImage2.MATERIAL_ADD); 
     floatingActionButton.bindFabToContainer(getContentPane(), Component.RIGHT, Component.BOTTOM); 
     floatingActionButton.addActionListener((e) -> newEntry(contentPane)); 
     contentPane.getParent().layoutContainer(); // Doesn't make a difference 
     runnableLog =() -> { 
      Log.p("x/y, height/layoutHeight: " + 
        contentPane.getAbsoluteX() + "/" + contentPane.getAbsoluteY() + ", " + 
        contentPane.getHeight() + "/" + contentPane.getLayoutHeight()); 
     }; 
     runnableLog.run(); 
    } 

    private void newEntry(Container contentPane) { 
     contentPane.add(new Label("" + ++entrytally)); 
     runnableLog.run(); 
     contentPane.repaint(); 
    } 
} 
+0

顯然,工具欄更改大小 –

+0

所以我想知道當爲contentPane添加內容時爲什麼工具欄會改變其大小 –

回答

0

沒有相關的高度變化很難猜測,但數你可以通過查看這是否僅針對iOS皮膚或僅針對Android皮膚來驗證。

我猜這將是因爲在iOS中保留的狀態欄空間,並影響工具欄高度。請注意,在施工過程中,元素尚未佈置,因此在此階段沒有尺寸保證。有幾個回調更確定,如initComponent()laidOut()

+0

在窗體構造函數完成和兩次之前調用'laidOut()'三次。只有這樣工具欄纔有最終尺寸。 –

+0

窗體的initComponent沒有被調用。 –

+0

在構造函數中使用'com.codename1.ui.Display.callSerially(Runnable)'我可以獲得工具欄和contentPane的最終大小。有沒有更好的方法來確定初始化的終止? –

相關問題