Android менеджер раскладок - раскладка у детей - PullRequest
1 голос
/ 05 января 2012

Я создал собственный менеджер макета, полученный из LinearLayout.(Я на самом деле не использую большую часть функциональности LinearLayout, но я не хочу заботиться обо всех многих абстрактных методах ViewGroup.) Я переписал только метод

protected void onLayout(boolean changed, int l, int t, int r, int b)

, и я вызываю child.layout (...) в MyLayout.onLayout (...) для каждого из его дочерних элементов.Все остальное - оригинал LinearLayout.Это будет работать нормально, и дочерние элементы будут правильно размещены в родительском MyLayout, если дочерние элементы - это простые элементы управления без детей (внуки MyLayout).

Проблемы возникают, когда я использую некоторые ViewGroup (LinearLayout, ViewSwitcher, ...) с детьми как дети MyLayout.В этом случае дети (из MyLayout) размещены хорошо, но внуки (из MyLayout) внутри каждого ребенка нет.Кажется, параметры и значения, такие как wrap_content, fill_parent, layoutWeight, обрабатываются неправильно.Например, ViewSwitcher в MyLayout не показывает свое содержимое, потомки LinearLayouts (потомок MyLayout) (внуки MyLayout) с fill_parent имеют размер 0px, иногда CompoundButton (потомок MyLayout) не показывает его текст ...

Кажется, child.layout (...) в MyLayout.onLayout правильно устанавливает размер и положение каждого дочернего элемента, но мне нужно вызвать какой-то другой метод, чтобы компоновка каждого дочернего элемента работала хорошо (если дочерним элементом является ViewGroup с дочерними элементами).Есть что-то подобное или MyLayout с только что измененным onLayout должен хорошо работать?

Спасибо за все советы.

1 Ответ

3 голосов
/ 05 января 2012

звучит так, как будто вам нужно переопределить onMeasure и вызвать measure () для каждого из дочерних элементов. если ваши дети - это группы представлений, а внуки - это представления, то вы хотите перебрать детей и вызвать показатель (int, int). тогда дети должны вызвать меру на внуков.

взгляните на источник linearLayout: http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.6_r1/android/widget/LinearLayout.java#LinearLayout.onMeasure%28int%2Cint%29

...