添加到FrameLayout的ImageViews具有零维度

时间:2012-11-14 17:59:29

标签: android android-layout android-widget

我正在开发一个包含许多视图的自定义ViewGroup。在构造函数中,我创建了许多FrameLayouts,每个FrameLayout包含两个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回调中,我设置了自定义ViewGroup的维度

        this.setMeasuredDimension(254, 43);

在onLayout回调中,我计算每个FrameLayouts的尺寸并为每个

调用布局方法
@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); 

        }
    }
}

我遇到的问题是FrameLayouts的大小正确并定位在自定义GroupView中,但FrameLayouts没有调整ImageViews的大小 - 它们的宽度和高度都没有。我使用HierarchyViewer验证了这一点。

我认为我错过了一些东西 - 我认为FrameLayout上的布局方法会根据子帧中添加到FrameLayout时传入的布局参数来调整子ImageViews的大小,但似乎没有。

非常感谢正确方向的指针。

由于

安德鲁

1 个答案:

答案 0 :(得分:0)

  

我假设FrameLayout上的布局方法会根据子帧中添加到FrameLayout时传入的布局参数来调整子ImageViews的大小,但似乎没有。

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