获取片段的父视图的大小以通过编程方式调整子视图的大小

问题描述 投票:0回答:3

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

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

我无法在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方法。

android view fragment
3个回答
1
投票

onCreateView在布局膨胀之前被调用,因此它们没有heightwidth。如果您想弄乱布局和views的绘制方式,则可以创建自己的视图,扩展View并实现onLayout();如果您是Google,那么有很多例子。


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返回的尺寸放置它。祝你好运。


0
投票

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

new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
         Log.d("test", "view width: "  + view.getWidth());
      }
    },1000);
© www.soinside.com 2019 - 2024. All rights reserved.