因为它可以与Relative
或Linear
布局一起使用。因此,如果我们稍后将 RelativeLayout
更改为 LinearLayout
,它可能会很有用。
LinearLayout.LayoutParams
似乎不是 ViewGroup.LayoutParams
的继承函数。
那么我们有什么理由应该使用 LinearLayout.LayoutParams
而不是另一个?使用此 LinearLayout.LayoutParams
是否有任何布局类型特定的优势?
最佳答案
LinearLayout需要使用LinearLayout.LayoutParams
,RelativeLayout需要使用RelativeLayout.LayoutParams
,否则会崩溃。虽然 MATCH_PARENT
和 WRAP_CONTENT
的常量相同,但特定的布局参数会向布局参数添加额外的信息,例如在 RelativeLayout
中, RelativeLayout.LayoutParams
将您指定的规则存储为 centerInParent
或 below
或 toRightOf
等。如果您给它一个 LinearLayout.LayoutParams
,它只会崩溃。
例如这是LinearLayout.LayoutParams
public static class LayoutParams extends ViewGroup.MarginLayoutParams {
@ViewDebug.ExportedProperty(category = "layout")
public float weight;
这是 RelativeLayout.LayoutParams
public static class LayoutParams extends ViewGroup.MarginLayoutParams {
@ViewDebug.ExportedProperty(category = "layout", resolveId = true, indexMapping = {
@ViewDebug.IntToString(from = ABOVE, to = "above"),
@ViewDebug.IntToString(from = ALIGN_BASELINE, to = "alignBaseline"),
@ViewDebug.IntToString(from = ALIGN_BOTTOM, to = "alignBottom"),
@ViewDebug.IntToString(from = ALIGN_LEFT, to = "alignLeft"),
@ViewDebug.IntToString(from = ALIGN_PARENT_BOTTOM, to = "alignParentBottom"),
@ViewDebug.IntToString(from = ALIGN_PARENT_LEFT, to = "alignParentLeft"),
@ViewDebug.IntToString(from = ALIGN_PARENT_RIGHT, to = "alignParentRight"),
@ViewDebug.IntToString(from = ALIGN_PARENT_TOP, to = "alignParentTop"),
@ViewDebug.IntToString(from = ALIGN_RIGHT, to = "alignRight"),
@ViewDebug.IntToString(from = ALIGN_TOP, to = "alignTop"),
@ViewDebug.IntToString(from = BELOW, to = "below"),
@ViewDebug.IntToString(from = CENTER_HORIZONTAL, to = "centerHorizontal"),
@ViewDebug.IntToString(from = CENTER_IN_PARENT, to = "center"),
@ViewDebug.IntToString(from = CENTER_VERTICAL, to = "centerVertical"),
@ViewDebug.IntToString(from = LEFT_OF, to = "leftOf"),
@ViewDebug.IntToString(from = RIGHT_OF, to = "rightOf"),
@ViewDebug.IntToString(from = ALIGN_START, to = "alignStart"),
@ViewDebug.IntToString(from = ALIGN_END, to = "alignEnd"),
@ViewDebug.IntToString(from = ALIGN_PARENT_START, to = "alignParentStart"),
@ViewDebug.IntToString(from = ALIGN_PARENT_END, to = "alignParentEnd"),
@ViewDebug.IntToString(from = START_OF, to = "startOf"),
@ViewDebug.IntToString(from = END_OF, to = "endOf")
}, mapping = {
@ViewDebug.IntToString(from = TRUE, to = "true"),
@ViewDebug.IntToString(from = 0, to = "false/NO_ID")
})
private int[] mRules = new int[VERB_COUNT];
private int[] mInitialRules = new int[VERB_COUNT];
private int mLeft, mTop, mRight, mBottom;
private boolean mRulesChanged = false;
private boolean mIsRtlCompatibilityMode = false;
/**
* When true, uses the parent as the anchor if the anchor doesn't exist or if
* the anchor's visibility is GONE.
*/
@ViewDebug.ExportedProperty(category = "layout")
public boolean alignWithParent;
关于android - 为什么不是每个人都使用 ViewGroup.LayoutParams 而不是 LinearLayout.LayoutParams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694660/