我们正在使用片段兼容性库,并且正在尝试获取片段的宽度,添加到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"/>
为什么会出现这种异常现象?任何帮助将不胜感激。
答案 0 :(得分:3)
与“活动”类似,未在Fragment :: onStart()中测量视图层次结构中的视图。要获得视图的大小,您需要创建一个OnGlobalLayoutListener并以下列方式使用它:
答案 1 :(得分:1)
答案 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
。