Я создал собственный менеджер макета, полученный из 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 должен хорошо работать?
Спасибо за все советы.