获取片段父视图的大小以编程方式对子项进行大小调整

时间:2012-06-12 22:42:04

标签: android view fragment

我有一个包含片段的布局。我将Layout的宽度设置为300dip。

我想以编程方式计算子节点相对于父节点的300dip的宽度。

我不能用XML做,因为它有一些“技巧”,使用weigths或RelativeLayout不起作用,我必须使用数学。

这是包含布局的片段......

<LinearLayout 
    android:layout_width="300dip"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >

    <fragment
        android:id="@+id/tabbar"
        android:name="com.test.MyFragment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

在MyFragment中有方法:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d("test", "container: "  + container);
    View view = inflater.inflate(R.layout.mylayout, container, false);
    Log.d("test", "view width: "  + view.getWidth());

    //do things with view

    return view;
}

我得到输出容器:null并且查看宽度:0并且我在片段或类似物中找不到任何onMeasure方法。

3 个答案:

答案 0 :(得分:1)

在您的布局夸大之前调用

onCreateView,因此它们没有heightwidth。如果您想要绘制布局和views的绘制方式,可以创建自己的视图,扩展View,并实现onLayout();如果你是谷歌,那就有很多例子。

答案 1 :(得分:0)

我认为你可以在onActivityCreated方法中以编程方式找到父视图的尺寸(LinearLayout):

@Override 
public void onActivityCreated(Bundle savedInstanceState){
     super.onActivityCreated(savedInstanceState);

     myActivityView =  (LinearLayout)  
             getActivity().findViewById(((View) getView().getParent()).getId());

     myFragment = (RelativeLayout) getView().findViewById(R.layout.mylayout);
//Change RelativeLayout to whatever your fragment is using
}

那么myActivityView应该是你的父视图。

修改

然后,您可以在onActivityCreated中使用ViewTreeObserver来获取父视图的尺寸。 myFragment应该是你的片段,所以你可以将它放在myActivityView返回的维度上。祝你好运。

答案 2 :(得分:0)

使用处理程序将获取高度和宽度。但这不是正确的方法。

new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
         Log.d("test", "view width: "  + view.getWidth());
      }
    },1000);