2017-01-03 3 views
1

Mir ist aufgefallen, dass der Inhaltsbereich manchmal nach der Initialisierung seine Größe ändert und sich fragt, warum das so sein sollte.ContentPane ändert die Größe nach der Initialisierung - warum?

Hier einige Code dies im Simulator zu demonstrieren - es im Simulator laufen und die Ausgabe beobachten - kleinere Häute kleinere Unterschiede:

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

Offenbar verändert die Symbolleiste ihre Größe –

+0

Also frage ich mich, warum die Symbolleiste ändert ihre Größe, wenn etwas zu dem contentPane hinzugefügt wird –

Antwort

0

Ohne die Zahlen auf die Höhenänderung zu erraten schwer es ist verwandt, aber Sie können dies überprüfen, indem Sie prüfen, ob dies nur für iOS-Skins oder nur für Android-Skins passiert.

Ich vermute, es wäre wegen der Statusleiste Speicherplatz, der in iOS reserviert ist und wirkt sich auf die Symbolleiste Höhe. Beachten Sie, dass während der Konstruktion Elemente noch nicht ausgelegt sind, so dass es in diesem Stadium keine Größengarantie gibt. Es gibt mehrere Callbacks, die deterministischer sind, wie initComponent() oder laidOut().

+0

'lidOut()' wird dreimal aufgerufen, bevor der Formularkonstruktor beendet und zwei weitere Male. Nur dann hat die Symbolleiste ihre endgültige Größe. –

+0

'initComponent' des Formulars wird überhaupt nicht aufgerufen. –

+0

Mit 'com.codename1.ui.Display.callSerial (Runnable)' im Konstruktor kann ich die endgültigen Größen von toolbar und contentPane abrufen. Gibt es eine bessere Möglichkeit, den Abbruch der Initialisierung zu bestimmen? –

Verwandte Themen