我有一个包含片段的布局。我将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方法。
答案 0 :(得分:1)
onCreateView
,因此它们没有height
或width
。如果您想要绘制布局和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);