[英]Inflating Vertical Linear Layout in Horizontal LinearLayout return width and height 0
我试图在一个自定义水平LinearLayout
中将5个垂直LinearLayout
膨胀。
首先,我使用LayoutInflater
将xml转换为View
。 然后,我将垂直布局添加到水平布局。
问题是在onMeasure
,我尝试设置子LinearLayout
垂直LinearLayout
的宽度和高度,但是,当我要求getWidth
和getHeight
它总是返回0。
我真的不明白这种行为。
你能帮我么。 非常感谢。
垂直LinearLayout的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000000" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="Button"
android:layout_weight="1" />
<com.vuric.nativesampler.customviews.BandSeekBar
android:id="@+id/bandSeek"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="8"
android:layout_gravity="center"/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Button" />
</LinearLayout>
容器水平LinearLayout的类:
public class EqualizerCustomLayout extends LinearLayout {
private static final int MARGIN = 4;
private Context context;
public EqualizerCustomLayout(Context context) {
super(context);
this.context = context;
init();
}
public EqualizerCustomLayout(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
init();
}
public EqualizerCustomLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
private void init() {
setOrientation(LinearLayout.HORIZONTAL);
setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
//getNumberOfBands is 5
for (int i = 0; i < CustomApplicationClass.get().getNumberOfBands(); ++i) {
LinearLayout linearLayout = (LinearLayout) inflate(context,
R.layout.slot_band_layout, null);
addView(linearLayout);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Log.v("jajaja", "onMeasure children are " + getChildCount());
int width = (CustomApplicationClass.get().getScreenSize().x / 100 * 45)
+ MARGIN * 2;
int height = (CustomApplicationClass.get().getScreenSize().x / 100 * 45)
+ MARGIN * 2;
LayoutParams params = new LinearLayout.LayoutParams(width / 5, width);
for (int i = 0; i < getChildCount(); ++i) {
LinearLayout layout = (LinearLayout) getChildAt(i);
layout.setLayoutParams(new LinearLayout.LayoutParams(width
/ getChildCount(), height));
Log.v("jajaja",
"view" + i + " , w: " + layout.getWidth() + " , h: "
+ layout.getHeight()); // always return 0 for both width and height
}
setMeasuredDimension(width, height);
}
}
您必须等到实际绘制视图为止。 有一个解决方法,可以在这里找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.