自定义控件面试题

2020-03-30  本文已影响0人  bruce1990

最近在面试的时候被问到怎么在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就能达到需求,整个自定义出来也没啥意义。其实面试官面试能面出面试者的自定义控件的能力即可,没必要玩这些。

上一篇下一篇

猜你喜欢

热点阅读