最近在面試的時候被問到怎么在LinearLayout下面設(shè)計一個子控件燥翅,在顯示完全第二個子控件的前提下扒接。設(shè)計的子控件需要占滿控件。起初的時候我一直陷入到如何去測量第二個控件的思路上盖腿,后面想想LinearLayout不是有weight的支持嗎诫隅,只需要將控件設(shè)置weight,管你寬度怎么玩都可以滿足需求啊咧最。
public class WrapView extends View {
public WrapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
ViewGroup.LayoutParams lp = getLayoutParams();
setLayoutParams(new LinearLayout.LayoutParams(lp.width,lp.height,1.0f));//設(shè)置weight
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.RED);
}
}
話說回來這道題作為自定義控件面試來問捂人,其實不太合適御雕。本身這個東西用ViewGroup來解決才是真的嚴格意義上對自定義控件的考察。因為子View只需要在xml中設(shè)置weight就能達到需求滥搭,整個自定義出來也沒啥意義酸纲。其實面試官面試能面出面試者的自定義控件的能力即可,沒必要玩這些瑟匆。