2012-05-02 83 views
11

我需要访问已评估的片段视图中所有组件的宽度和高度。所以我需要一些告诉我的通知,片段布局阶段的视图已经完成。获取片段视图中组件的宽度和高度

在活动中我可以使用onWindowFocusChanged(boolean hasFocus)生命周期方法,但片段没有这个方法。

我发现的唯一方法是使用getView().addOnLayoutChangeListener()。但它多次呼叫,只有上次呼叫对我有用。

存在任何更好的方式如何在片段的视图中完成布局后调用一些?

+0

相关问题http://stackoverflow.com/questions/14397959/capture-layout-resize-before-api-11 –

回答

1

您实际上可以手动触发布局传递 - 您只需使用适当的MeasureSpecs调用View.measure(int,int)即可。例如,如果这个片段被连接到父视图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

+0

但测量只给出建议的大小,实际大小是知道布局后通过。我不需要手动运行它,因为Android本身再次运行它(我认为)。 – ATom

+0

它实际上不只是推荐的尺寸。度量通过用于告诉观点“这是你得到的,按你的意愿使用它”。例如在一个ListView中,宽度的约束是正确的,而对于高度则是未知。您所测量的尺寸并不总是与展开的尺寸相同,但它几乎总是如此。我不确定你想要做什么? –

+0

我只需要在片段后通知它,并且其内容已经完成测量和布局传递并且所有维度都是最终的。 – ATom