Мне нужен доступ к уже оцененной ширине и высоте всего компонента в представлении фрагмента. Поэтому мне нужно какое-то уведомление, которое скажет мне, что представление фаз макета фрагмента уже сделано.
В деятельности я могу использовать onWindowFocusChanged(boolean hasFocus)
метод жизненного цикла, но фрагмент не имеет этого метода.
Единственным способом, который я нашел, является использование getView().addOnLayoutChangeListener()
. Но он вызывает несколько раз, и только последний вызов полезен для меня.
Существует какой-либо лучший способ, как вызвать несколько после того, как макет сделан в виде фрагмента?
Фактически вы можете инициировать View.measure(int,int)
макета вручную – вам просто нужно вызвать 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