Obtener el ancho de fragmento 0 en onStart ()

Estamos utilizando biblioteca de compatibilidad de fragmentos, y estamos tratando de obtener el ancho del fragmento, agregado a FrameLayout. De acuerdo con el ciclo de vida de los fragmentos, hasta que onCreateView se ejecute, getView (). GetMeasuredWidth () devolverá 0. Sin embargo, estamos recibiendo 0 en onStart (), que viene después de onCreateView, y por lo tanto, el valor devuelto no debe ser 0.

Este es el fragmento que ancho queremos saber:

<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"/> 

¿Por qué esta anomalía está sucediendo? Cualquier ayuda será apreciada.

Similar a Actividades, las vistas en la jerarquía de vista no se han medido en Fragmento :: onStart (). Para obtener el tamaño de la vista, debe crear un OnGlobalLayoutListener y utilizarlo de la siguiente manera:

Android consigue el ancho del fragmento

Es sólo una suposición, pero de acuerdo con los desarrolladores de Android :

OnStart () hace que el fragmento sea visible para el usuario (en función de su actividad que se está iniciando).

Así que el ancho y la altura se calcularán sólo después de que su fragmento se vuelva visible.

Pero, tal vez, no estoy bien.

Me encontré con el mismo problema con una actividad. Necesitaba una de mis imágenes para mantener una proporción de 4: 6. Tan simple como pude encontrar para los fragmentos poner el código en su OnStart () para las actividades que era el OnWindowFocusChanged ()

De la investigación de esto resulta que es porque el diseño no ha "dibujado" todavía. Por lo tanto, no se han medido componentes. Hay varios otros trabajos alrededor pero esto me pareció ser las implementaciones más rápidas.

En una situación similar, usé el método post () de la clase View:

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

Creo que necesitas definir el android:class con la clase de tu fragmento.

  • Opciones de Skin Menu Android
  • Cómo envolver el título de preferencia?
  • Cómo hacer que customAdapter rellene la altura de gridview
  • Android: agrega un estilo a la barra de acciones en una actividad
  • ¿Es la mejor práctica para crear un botón como este en una aplicación de Android?
  • Match_parent no funciona con CoordinatorLayout
  • Xamarin Android - no flowlayout?
  • Incluir no funciona
  • Instrucción format en un archivo de recursos de cadena
  • ¿Es posible guardar layout_weight en un xml?
  • Diseño de EditText con esquinas redondeadas y sombra interior
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.