未在自定义ViewGroup中设置layout_width / -height的子项

时间:2012-08-14 08:49:20

标签: android children viewgroup

我创建了一个自定义的ViewGroup,除了当我将视图拖放到此ViewGroup时,编辑器说它无法将layout_width和layout_height设置为子节点。可能导致什么呢?

我只覆盖了两种方法 - onLayout和onMeasure。我相信我在onMeasure上犯了一个错误,因为我还不知道它应该如何衡量孩子。

无论如何,这是我的onMeasure:

@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
            MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST);
    final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
            MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.AT_MOST);

    int count = getChildCount();

    for (int i = 0; i < count; ++i) {
        View child = getChildAt(i);

        child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
    }

    setMeasuredDimension(mWidth, mHeight);
}

那么,我如何让我的viewgroup的孩子获得layout_with和layout_height参数呢?

P.S。我知道我的ViewGroup是固定的宽度和高度,但这就是我想要的。

1 个答案:

答案 0 :(得分:1)

事实证明我应该使用MeasureSpec.EXACTLY。不知道它存在。

child.measure(MeasureSpec.EXACTLY | childWidth, MeasureSpec.EXACTLY | childHeight);

P.S。如果有人有更好的评论答案 - 我会接受它作为答案。我很乐意阅读更多信息;)