Все классы макетов (LinearLayout
, RelativeLayout
и т. Д.) Расширяются ViewGroup
.
Класс 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
.