0

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

我想以编程方式计算与父级 300dip 相关的子级宽度。

我不能在 XML 中做到这一点,因为它有一些“技巧”并且使用重量或相对布局将不起作用,我必须使用数学。

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

<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;
}

我得到输出 container: null 和 view width: 0 并且我在片段或类似中找不到任何 onMeasure 方法。

4

3 回答 3

1

onCreateView在您的布局膨胀之前调用,因此它们没有heightor width。如果您想摆弄布局和views绘制方式,您可以创建自己的视图、扩展View和实现onLayout();如果你谷歌,有很多这样的例子。

于 2012-06-12T23:55:01.497 回答
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 返回的尺寸放置它。祝你好运。

于 2012-06-13T00:06:55.313 回答
0

使用 Handler 将获得高度和宽度。但这不是正确的方法。

new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
         Log.d("test", "view width: "  + view.getWidth());
      }
    },1000);
于 2020-01-30T08:36:54.287 回答