在片段的onCreateView中获取子布局(包括子元素)的高度

时间:2015-12-11 22:20:58

标签: android android-layout android-fragments

我在片段中使用的布局大小始终为0.

我有一个包含子布局的片段,如下所示:

 <RelativeLayout android:id="@+id/animationLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="30dp"
    android:background="@color/colorPrimary"
    android:elevation="4dp">

此布局有一个子布局,其定义如下:

  <TableLayout android:id="@+id/searchForm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:stretchColumns="0"
            android:background="@color/colorPrimary"
            android:descendantFocusability="beforeDescendants"
            android:focusableInTouchMode="true">

            [Some Child elements]
</TableLayout>

在父片段的onCreateView中,布局'searchForm'的高度始终为0.

即使我在

中测量尺寸
searchForm.post(new Runnable() {
     @Override
     public void run() {
        searchFormHeight = searchForm.getHeight(); //always 0
     }
}

大小为0.

如何在onCreateView中获得此布局的大小?

3 个答案:

答案 0 :(得分:0)

好的,我以前不知道我做错了什么,但最后跟着为我工作了:

 searchForm.post(new Runnable() {
         @Override
         public void run() {
            searchFormHeight = searchForm.getHeight();
         }
  });

答案 1 :(得分:0)

当整个视图膨胀时,您需要使用ViewTreeListener进行回调。如果我记得android等待整个视图立刻膨胀,那么即使一个视图被实例化,也可能不会膨胀返回高度为0.

searchForm.getViewTreeObserver()
     .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
     @Override
     public boolean onPreDraw () {
        searchFormHeight = searchForm.getHeight();

        return true;
});

答案 2 :(得分:0)

实际上onCreateView()处理视图的创建,这就是为什么它返回0

尝试按下以获取高度,将函数覆盖为片段类

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);
    searchFormHeight = searchForm.getHeight();

}