我创建了一个InnerCustomView,尽管我覆盖了onMeasure
,但视图高度未设置为所需的高度。
这里是一些上下文。
我有一个CustomView
。该视图有一个容器(RelativeLayout
),在这里,我有4个InnerCustomViews
以及需要放置在容器中的两个准则。为简单起见,我在这里只显示其中一个InnerCustomViews
,因为我无法将此视图设置为我的宽度和高度要求。
这是CustomView
布局的相关信息:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grey">
<ImageView
android:id="@+id/image"
....
/>
<RelativeLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/red"
android:layout_below="@+id/image">
<View
android:id="@+id/guide"
android:layout_width="12dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:background="@android:color/holo_green_dark" />
.......
<...InnerCustomView
android:id="..."
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toEndOf="@id/guide"
android:background="@color/green"
... />
</RelativeLayout>
</RelativeLayout>
在CustomView
中,我正在这样做:
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//Based on the container size I calculate the InnerCustomView desiredSize
innerCustomView.measure(MeasureSpec.makeMeasureSpec(desiredSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(desiredSize, MeasureSpec.EXACTLY));
}
InnerCustomView
只有一个ImageView
和一个TextView
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/grey">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
我在InnerCustomView
中有这个东西:
public class InnerCustomView extends LinearLayout {
//Default constructors and other stuff.
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measureChildren(widthMeasureSpec, heightMeasureSpec);
//Here I'm loging the values in widthMeasureSpec and heightMeasureSpec and I can see that they are the desiredSize
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
}
如果您看下面的图像,除了高度,我的布局是预期的。垂直导轨(深绿色)在正确的位置,InnerCustomView
在正确的位置。问题是宽度和高度不是我调用measure
时通过的宽度和高度。
宽度占用了可用的空间,高度也占用了整个视图的高度(浅绿色)
另一方面,InnerCustomView
内容具有desiredSize
(灰色)。
任何想法为什么会这样?
我试图使视图,requestLayout(),forceLayout()无效(),但没有成功。