Настройка параметров компоновки времени выполнения

В представлении фрагмента я хотел бы настроить параметры макета одного из дочерних представлений на основе ширины содержащего представления, параметры макета которого установлены на match_parent. Мне нужно сделать это, чтобы вызвать getWidth / getHeight для родителя, а затем установить ViewGroup.LayoutParameters дочернего представления и т. Д.

Проблема в том, что getWidth вернет только допустимое значение после того, как макет был выведен в первый раз, и я не уверен, есть ли какие-либо переопределения фрагментов, которые я могу использовать для этого. Например, фактическая ширина представления не определяется при вызове onCreateView или onStart.

Итак, есть ли простой способ реализовать это, или мне придется подклассифицировать представление и переопределить onLayout или onMeasure?

Вы можете установить глобальный приемник макетов в дереве представлений и выполнить свое действие.

final ViewTreeObserver vto = myView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { // do layout tweaking based on measurements // remove the listener... or we'll be doing this a lot. vto.removeGlobalOnLayoutListener(this); } }