多数のビューを含むカスタムViewGroupを開発しています。コンストラクターで、それぞれ2つのImageViewを含むいくつかのFrameLayoutを作成します。各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コールバックでは、各FrameLayoutのサイズを計算し、それぞれのレイアウトメソッドを呼び出します。
@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内で正しいサイズと位置に配置されているが、ImageViewsがFrameLayoutsによってサイズ変更されていないことです-幅と高さがゼロです。HierarchyViewerを使用してこれを検証しました。
私は何かを見逃したと思います-FrameLayoutのレイアウトメソッドは、子としてFrameLayoutに追加されたときに渡されたレイアウトパラメータに基づいて子ImageViewのサイズ変更を処理すると思いましたが、そうではないようです。
正しい方向へのポインタをいただければ幸いです。
ありがとう
アンドリュー