我有一个包含片段的布局。我将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方法。
onCreateView
在布局膨胀之前被调用,因此它们没有height
或width
。如果您想弄乱布局和views
的绘制方式,则可以创建自己的视图,扩展View
并实现onLayout()
;如果您是Google,那么有很多例子。
我认为您可以通过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返回的尺寸放置它。祝你好运。
使用处理程序将获取高度和宽度。但这不是正确的方法。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d("test", "view width: " + view.getWidth());
}
},1000);