Получение ширины фрагмента 0 в onStart ()

Мы используем библиотеку совместимости фрагментов и пытаемся получить ширину фрагмента, добавленного в FrameLayout. В соответствии с жизненным циклом фрагмента, пока не будет выполнено onCreateView, getView (). GetMeasuredWidth () должен вернуть 0. Однако мы получаем 0 в onStart (), который появляется после onCreateView, и поэтому возвращаемое значение не должно быть 0.

Это фрагмент, который мы хотим узнать по ширине:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <FrameLayout android:id="@+id/details" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/carbon_fiber"/> 

Почему эта аномалия происходит? Любая помощь будет оценена по достоинству.

Подобно действиям, представления в иерархии представлений не были измерены в Fragment :: onStart (). Чтобы получить размер представления, вам необходимо создать OnGlobalLayoutListener и использовать его следующим образом:

Android получить ширину фрагмента

Это просто предположение, но, по словам разработчиков Android :

OnStart () делает фрагмент видимым для пользователя (в зависимости от его запускающей активности).

Таким образом, ширина и высота будут вычисляться только после того, как ваш фрагмент станет видимым.

Но, может быть, я не прав.

Я столкнулся с той же проблемой с Activity. Мне понадобилось одно из моих изображений для поддержания соотношения 4: 6. Так просто, как я мог найти для фрагментов, я поместил код в свой OnStart () для Activities, это был OnWindowFocusChanged ()

Исследуя это, оказывается, потому, что макет еще не нарисован. Поэтому никакие компоненты не были измерены. Существуют различные другие работы, но это казалось мне самой быстрой реализацией.

В аналогичной ситуации я использовал метод post () класса View:

 getView().post( new Runnable(){ @Override public void run(){ //do your measurements here } }); 

Я думаю, вам нужно определить android:class с классом вашего фрагмента.