Alle Layout-Klassen ( LinearLayout
, RelativeLayout
, etc.) erweitern ViewGroup
.
En ViewGroup
Klasse hat zwei statische innere Klassen: LayoutParams
y MarginLayoutParams
. Und ViewGroup.MarginLayoutParams
erstreckt sich tatsächlich ViewGroup.LayoutParams
.
Manchmal benötigen Layout-Klassen zusätzliche Layout-Informationen, um mit der untergeordneten Ansicht verbunden zu werden. Zu diesem Zweck definieren sie ihre internen statischen LayoutParams
Klasse. Zum Beispiel, LinearLayout
hat:
public class LinearLayout extends ViewGroup {
...
public static class LayoutParams extends ViewGroup.MarginLayoutParams {
...
}
}
Dasselbe gilt für RelativeLayout
:
public class RelativeLayout extends ViewGroup {
...
public static class LayoutParams extends ViewGroup.MarginLayoutParams {
...
}
}
Aber LinearLayout.LayoutParams
y RelativeLayout.LayoutParams
sind völlig unterschiedliche, unabhängige Klassen. Sie speichern verschiedene zusätzliche Informationen über untergeordnete Ansichten.
Zum Beispiel, LinearLayout.LayoutParams
kann assoziieren weight
Wert mit jeder Ansicht, während RelativeLayout.LayoutParams
kann nicht. Das Gleiche gilt für RelativeLayout.LayoutParams
: Sie kann Werte wie above
, below
, alightWithParent
mit jeder Ansicht. Und LinearLayout.LayoutParams
verfügen einfach nicht über diese Fähigkeiten.
Im Allgemeinen müssen Sie also Folgendes verwenden LayoutParams
aus dem umschließenden Layout, damit Ihre Ansicht korrekt positioniert und gerendert wird. Beachten Sie jedoch, dass alle LayoutParams
dieselbe übergeordnete Klasse haben ViewGroup.LayoutParams
. Und wenn Sie nur Funktionen verwenden, die in dieser Klasse definiert sind (wie in Ihrem Fall WRAP_CONTENT
y FILL_PARENT
) können Sie einen funktionierenden Code erhalten, auch wenn dieser falsch ist. LayoutParams
Klasse wurde verwendet, um Layout-Parameter festzulegen.