2009-11-05 3 views
0

Взятые из документации Android о LayoutParams:Что это значит, когда родительский wraps_content и ребенок заполняют_parent?

FILL_PARENT, что означает, что мнение хочет быть столь же большим, как его родитель (минус отступ)

WRAP_CONTENT, что означает, что мнение хочет быть большим достаточно, чтобы вложить его содержимое (плюс дополнение)

Теперь, если родитель устанавливает свою высоту до wrap_content, а ребенок устанавливает свою высоту до fill_parent, что же это на самом деле означает? Я имею в виду, это звучит как «связь» между запросами размера: ребенок хочет быть таким же большим, как и его родитель, но родитель хочет быть таким же большим, как и его ребенок.

Я читал How Android Draws Views, но статья не объясняет, как параметры макета и MeasureSpec фактически работают вместе.

ответ

1

В основном MeasureSpecs имеют размер, а LayoutParams помогает родительскому представлению распространять доступный размер между его дочерними элементами.
Ну в принципе он работает как-то так: предположить, ViewHierachy P0 - P1 - C0, C1 (P для родителей, C для ребенка)
1) P0 называет меру P1 с некоторыми MeasureSpecs (зависит от LayoutParams Р1)
2) при вызове onMeasure P1, P1 знает, насколько велики могут быть параметры измерения, предоставленные P0
3) P1 необходимо рассказать им о детях их размер, основанный на LayoutParams каждого ребенка, например: Ребенок (C0) имеет LayoutParams. width = "FILL_PARENT" и P1 - LinearLayout с вертикальным выравниванием, , поэтому P1 может рассказать ему C0 child MeasureSpec.AT_MOST с его шириной. Чтобы определить высоту каждого ребенка, P1 знает: количество детей, LayoutParams каждого ребенка и степень тяжести каждого ребенка (если есть), чтобы он мог распределять доступную высоту между дочерними элементами.

Надеюсь, что это поможет, для более глубокого подхода вы можете увидеть метод LinearLayout.onMeasure, в котором есть некоторые комментарии, которые помогут вам понять, что происходит.