子が追加された ViewGroup (これをAと呼びましょう) があります。Aを親の半分の幅にしたい。
onMeasure で widthMeasureSpec に含まれる親サイズの半分に幅を設定していますが、私が直面している問題は、A ビューが画面の半分をカバーしているにもかかわらず、子が正しく配置されていないために測定が行われないことです。
以下は私のonMeasureとonLayoutです。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthLimit = MeasureSpec.getSize(widthMeasureSpec) - getPaddingRight();
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int width = 0;
int height = 0;
int rightPadding = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
rightPadding = child.getPaddingRight();
measureChild(child, MeasureSpec.makeMeasureSpec((widthLimit / 2) - rightPadding - child.getPaddingLeft(), widthMode), heightMeasureSpec);
width += child.getMeasuredWidth();
height += child.getMeasuredHeight();
}
width = widthLimit / 2;
width -= rightPadding;
setMeasuredDimension(width, resolveSize(height, heightMeasureSpec));
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.layout(0, 0, child.getMeasuredWidth(), child.getMeasuredHeight());
}
}
問題の参照用にサンプル ビューを追加しました。