最近在面试的时候被问到怎么在LinearLayout下面设计一个子控件,在显示完全第二个子控件的前提下。设计的子控件需要占满控件。起初的时候我一直陷入到如何去测量第二个控件的思路上,后面想想LinearLayout不是有weight的支持吗,只需要将控件设置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));//设置weight
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.RED);
}
}
话说回来这道题作为自定义控件面试来问,其实不太合适。本身这个东西用ViewGroup来解决才是真的严格意义上对自定义控件的考察。因为子View只需要在xml中设置weight就能达到需求,整个自定义出来也没啥意义。其实面试官面试能面出面试者的自定义控件的能力即可,没必要玩这些。
网友评论