Получить ширину и высоту компонентов в представлении Фрагмент

Мне нужен доступ к уже оцененной ширине и высоте всего компонента в представлении фрагмента. Поэтому мне нужно некоторое уведомление, которое говорит мне, что представление фаз макета фрагмента уже сделано.

В активности я могу использовать метод жизненного цикла onWindowFocusChanged(boolean hasFocus), но этот фрагмент не имеет этого метода.

Единственным способом, который я нашел, является использование getView().addOnLayoutChangeListener(). Но он вызывает несколько раз, и только последний вызов полезен для меня.

Есть ли какой-либо лучший способ вызова некоторых после компоновки в виде фрагмента?

Ответ 1

Фактически вы можете инициировать перенос макета вручную - вам просто нужно вызвать View.measure(int,int) с помощью соответствующих MeasureSpec. Например, если фрагмент должен быть прикреплен к родительскому представлению parentView, и вы хотите, чтобы он имел тот же размер, вы бы сделали следующее:

View fragmentView = fragment.getView();
fragmentView.measure(MeasureSpec.makeMeasureSpec(parentView.getMeasuredWidth(),
                                                 MeasureSpec.EXACTLY),
                     MeasureSpec.makeMeasureSpec(parentView.getMeasuredHeight(),
                                                 MeasureSpec.EXACTLY));

Подробнее о том, как проходит действие меры/макета: http://developer.android.com/reference/android/view/View.html#Layout