在onStart()中获取片段宽度0

时间:2012-03-25 12:47:26

标签: android android-layout android-fragments

我们正在使用片段兼容性库,并且正在尝试获取片段的宽度,添加到FrameLayout。根据片段生命周期,直到onCreateView被执行,getView()。getMeasuredWidth()应该返回0.但是,我们在onStart()中得到0,它出现在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"/>

为什么会出现这种异常现象?任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

与“活动”类似,未在Fragment :: onStart()中测量视图层次结构中的视图。要获得视图的大小,您需要创建一个OnGlobalLayoutListener并以下列方式使用它:

Android get Fragment width

答案 1 :(得分:1)

这只是一个假设,但根据Android Developers

  

onStart()使片段对用户可见(基于其包含的活动被启动)。

因此,只有 >后,您的片段才会显示宽度和高度。

但是,也许,我不对。

答案 2 :(得分:0)

我遇到了与Activity相同的问题。我需要我的一张图片才能保持4:6的比例。因此,就像我能找到的片段一样简单,我将代码放在OnStart()for Activities中,它就是OnWindowFocusChanged()

通过对此进行研究,事实证明这是因为布局实际上没有&#34;绘制&#34;然而。因此,没有测量任何组件。还有其他各种工作,但在我看来这是最快的实现。

答案 3 :(得分:0)

在类似的情况下,我使用了View类的post()方法:

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

答案 4 :(得分:-1)

我认为您需要使用片段的类定义android:class