2013-07-27 2 views
1

В onCreateView() моего Fragment класса я создаю и возвращая View, содержимое которого необходимо динамически создается на основе фактической ширины экрана и высоты Fragment.Определить ширину и высоту в onCreateView фрагмента()

Было бы идеально, если бы я смог определить ширину и высоту в пределах onCreateView(). Это связано с тем, что когда View построен в пределах onCreateView(), к нему добавляются многие дочерние элементы View и как родительский макет View организует эти дети в столбцы в зависимости от доступной ширины и высоты (для создания своего рода контейнера столбцов «жидкость»).

Я пробовал посмотреть, что LayoutParams содержится в ViewGroup, переданном onCreateView(), но ширина и высота кажутся константами в отличие от конкретных ширины и высоты.

Был ли я прав, полагая, что на этом этапе фазы компоновки (в пределах FragmentonCreateView()) нет ширины и высоты? Если это так, то, что я подозреваю, мне нужно сделать, это построить мой контейнер View в два этапа: (1) сначала добавить детей к нему, а затем (2) фактически организовать эти дочерние View s в столбцы в пределах переопределения метод, который вызывается в точке, когда известны ширина и высота.

ответ

0

Да, вы правы. В фрагменте onCreateView() ширина и высота пока недоступны (оба равны 0). Делать это точно так, как вы сказали в 2 этапа, не нужно. Я полагаю, вы можете сделать это двумя способами:

  1. Без пользовательского вида: Вы можете использовать ViewTreeObserver в фрагменте, чтобы определить, когда ширина и высота вычисляются, а затем рассчитать размер для представлений ребенка и добавить их.

  2. С пользовательским представлением: вы можете создать пользовательский вид, как вы упомянули, и в onDraw() вы можете добавить дочерние представления. В методе onDraw() ширина и высота уже вычислены.

Смежные вопросы