Android 添加到FrameLayout的ImageView没有维度

Android 添加到FrameLayout的ImageView没有维度,android,android-layout,android-widget,Android,Android Layout,Android Widget,我正在开发一个包含多个视图的自定义视图组。在构造函数中,我创建了许多框架布局,每个框架布局将包含两个ImageView。每个Framelayout和子视图都是使用以下代码创建的 FrameLayout frame = new FrameLayout(context); ImageView digitView = new ImageView(context); digitView.setScaleType(ScaleType.CENTER_CROP); frame.addView(digitVi

我正在开发一个包含多个视图的自定义视图组。在构造函数中,我创建了许多框架布局,每个框架布局将包含两个ImageView。每个Framelayout和子视图都是使用以下代码创建的

FrameLayout frame = new FrameLayout(context);

ImageView digitView = new ImageView(context);
digitView.setScaleType(ScaleType.CENTER_CROP);
frame.addView(digitView,
        new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));

ImageView bezelView = new ImageView(context);
bezelView.setScaleType(ScaleType.CENTER_CROP);
bezelView.setImageResource(R.drawable.bezel);
frame.addView(bezelView);


this.addView(frame, params); 
在onMeasure回调中,我设置了自定义视图组的维度

        this.setMeasuredDimension(254, 43);
在onLayout回调中,我计算每个FrameLayouts的尺寸,并为每个FrameLayouts调用layout方法

@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom)
{
    if (changed)
    {
        float width = (float)(right - left) / (float)this.digits;

        if ((int)(width/ASPECT_RATIO) > bottom- top)
            width = (float)(bottom - top) * ASPECT_RATIO;
        this.digitWidth = (int)width;
        this.digitHeight = (int)(width/ASPECT_RATIO);

        this.xOffset = ((right - left) - (this.digits * this.digitWidth))/2;
        this.yOffset = ((bottom - top) - this.digitHeight)/2;

        for (int i = this.digits-1; i >=0; i--)
        {
            int x = xOffset + i * this.digitWidth;
            this.placeFrames.get(i).layout(x, this.yOffset, x + this.digitWidth, yOffset + this.digitHeight); 

        }
    }
}
我遇到的问题是,框架布局在自定义GroupView中的大小和位置正确,但ImageView没有被框架布局调整大小-它们的宽度和高度为零。我使用HierarchyViewer验证了这一点

我想我遗漏了一些东西-我假设FrameLayout上的layout方法会根据作为子项添加到FrameLayout时传入的布局参数调整子ImageView的大小,但似乎不是这样

如果能给我一个指向正确方向的指针,我将不胜感激

谢谢

安德鲁

我假设FrameLayout上的layout方法会根据作为子项添加到FrameLayout时传入的布局参数调整子ImageView的大小,但似乎不是这样


您自己既不是
layout()
这些ImageView对象,也不是调用
super.onLayout()

谢谢您的指针-您的评论让我看到了正确的区域-我确实需要在每个图像视图上调用layout。我还确定不需要封闭的FrameLayout,因为我可以将ImageView直接放置在自定义视图组的边界内。我想你的意思是我也应该调用
super.layout()
,而不是
super.onLayout()
。谢谢