Layout-Grundlagen
Das Layout steuert die Positionierung von Oberflächenelementen in ihrem enthaltenden UIElementContainer. Dazu müssen Sie an jedem Container ein Objekt vom Typ Layout anfügen. An jedem in diesem Container enthaltenen Kindobjekt müssen Sie jeweils ein dazu passendes Objekt vom Typ LayoutData aggregieren. LayoutData steuert die Layouteigenschaften des jeweiligen Kind des Containers, z.B. könnte dies die Position in einem durch das Layout definierten Koordinatensystem sein.

Jeder Oberflächenelement-Container aggregiert ein entsprechendes Layout-Objekt, welches beschreibt, wie die eingefügten Oberflächenelement-Kinder innerhalb des Containers angeordnet werden. Der Typ dieses Layout-Objekts ist eine Unterklasse der abstrakten Basisklasse Layout.
Folgende Layout-UI-Elemente werden zur Anordnung der Oberflächenelemente in einer View angeboten:
Ein FlowLayout ordnet die Container-Kinder sequenziell an, was heißt, dass beispielsweise keine definierten Zeilenumbrüche beschrieben werden können. Ein FlowLayout hängt damit von der Client-Technologie und auch von der Größe des Browser-Fensters ab.
Ein MatrixLayout ordnet die Container-Kinder in einer tabellenartigen Struktur an. Mit den Eigenschaften stretchedHorizontally und stretchedVertically können Sie festlegen, ob die Oberflächenelemente auf die Containergröße angepasst werden. Im Unterschied zum GridLayout können Sie beispielsweise die Spaltenanzahl nicht explizit definieren, sondern Sie ordnen einem Oberflächenelement ein MatrixHeadData zu, dann wird dieses Oberflächenelement in die nächste Zeile umgebrochen. Ein großer Vorteil bei der Verwendung des MatrixLayout gegenüber dem GridLayout liegt im einfachen Erstellen von einheitlichen Layout-Strukturen, die durch die angebotenen Zellklassen ermöglicht werden.
Ein RowLayout verhält sich ähnlich wie das Matrix-Layout, jedoch ordnet es die Oberflächenelemente fortlaufend in einer einzigen Spalte an. Wenn Sie einem Oberflächenelement ein RowHeadData zuordnen, dann wird genau dieses Oberflächenelement in die nächste Zeile umgebrochen. Ein großer Vorteil bei der Verwendung des RowLayout liegt im einfachen Erstellen von einheitlichen Layout-Strukturen durch die vordefinierten Zellklassen, so wie diese auch im Matrix-Layout angeboten werden

Verwenden Sie anstelle des GridLayouts möglichst das MatrixLayout.
Ein GridLayout ordnet die Container-Kinder in einem zweidimensionalen Gitter mit definierter Spaltenanzahl und beliebig vielen Zeilen an. Zeilenumbrüche können definiert werden. Sie werden automatisch ausgeführt, wenn ein Oberflächenelement nicht mehr innerhalb einer Zeile angezeigt werden kann.

Beim dynamischen Programmieren können Sie CL_WD_DYNAMIC_TOOL->CREATE_LAYOUT_DATA verwenden, um einem UI-Element die richtigen Layout-Daten zu verschaffen.
In der ABAP Workbench im View Designer geschieht dies (fast) automatisch.