すべてのレイアウト クラス ( LinearLayout
、RelativeLayout
など) は extendsViewGroup
です。
クラスには 2 つのViewGroup
静的内部クラスがあります:LayoutParams
とMarginLayoutParams
. そしてViewGroup.MarginLayoutParams
実際に拡張しViewGroup.LayoutParams
ます。
レイアウト クラスでは、子ビューに関連付ける追加のレイアウト情報が必要になる場合があります。このために、内部静的LayoutParams
クラスを定義します。たとえば、次のLinearLayout
とおりです。
public class LinearLayout extends ViewGroup {
...
public static class LayoutParams extends ViewGroup.MarginLayoutParams {
...
}
}
についても同じですRelativeLayout
:
public class RelativeLayout extends ViewGroup {
...
public static class LayoutParams extends ViewGroup.MarginLayoutParams {
...
}
}
しかしLinearLayout.LayoutParams
、 とRelativeLayout.LayoutParams
は完全に異なる独立したクラスです。子ビューに関するさまざまな追加情報を保存します。
たとえば、値を各ビューにLinearLayout.LayoutParams
関連付けることはできますが、関連付けることはできません。、、などの値を各ビューに関連付けることができます。そして、単にこれらの機能を持っていません。weight
RelativeLayout.LayoutParams
RelativeLayout.LayoutParams
above
below
alightWithParent
LinearLayout.LayoutParams
したがって、一般に、LayoutParams
ビューを正しく配置してレンダリングするには、囲みレイアウトを使用する必要があります。ただし、すべてLayoutParams
同じ親クラスを持つことに注意してくださいViewGroup.LayoutParams
。また、そのクラスで定義されている機能のみを使用する場合 (あなたの場合WRAP_CONTENT
やのように)、間違ったクラスを使用してレイアウト パラメーターを指定しFILL_PARENT
たとしても、動作するコードを取得できます。LayoutParams