すべてのレイアウト クラス ( 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関連付けることはできますが、関連付けることはできません。、、などの値を各ビューに関連付けることができます。そして、単にこれらの機能を持っていません。weightRelativeLayout.LayoutParamsRelativeLayout.LayoutParamsabovebelowalightWithParentLinearLayout.LayoutParams
したがって、一般に、LayoutParamsビューを正しく配置してレンダリングするには、囲みレイアウトを使用する必要があります。ただし、すべてLayoutParams同じ親クラスを持つことに注意してくださいViewGroup.LayoutParams。また、そのクラスで定義されている機能のみを使用する場合 (あなたの場合WRAP_CONTENTやのように)、間違ったクラスを使用してレイアウト パラメーターを指定しFILL_PARENTたとしても、動作するコードを取得できます。LayoutParams