本文共 733 字,大约阅读时间需要 2 分钟。
我们写好自定义控件后,一般在xml布局文档里引用,activity加载时,在构造器上只是传递一个AttributeSet的参数,因为还在creating,所以这时候是无法得知控件的实际尺寸的。但是ViewTreeObserver的GlobalLayoutListener实际可以捕获到获得位置的时机:
比如我在自定义TuyaView的构造函数中加入这些代码:
public TuyaView(final Context context,AttributeSet atts){ super(context,atts); ViewTreeObserver v = getViewTreeObserver(); v.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { getViewTreeObserver().removeGlobalOnLayoutListener(this); int w=getWidth(); int h=getHeight(); init(context,w,h); } }); }在获得宽和高之后才调用init方法来做初始化。
上述的代码是对XML布局文件的支持,如果你又想支持用代码创建自定义控件的话,应该再你的类里面加入泪如public TuyaView(Context context, int w, int h) 这样的构造器了。
转载地址:http://hozfi.baihongyu.com/