Android取得长宽的问题

今天在重写View时遇到一个问题,在构造函数中使用getWidth()时为0,而在onDraw函数中却可以取到值。一番搜索后终于知道了原因:

当一个view对象创建时,android并不知道其大小,所以getWidth()getHeight()返回的结果是0,真正大小是在计算布局时才会计算

所以,要想在构造函数中取得长宽,需要如下代码:
		DisplayMetrics dm = new DisplayMetrics();
		WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
		wm.getDefaultDisplay().getMetrics(dm);
		width = dm.widthPixels/9f;// 获取屏幕分辨率宽度
		height = dm.heightPixels/9f;
由于不是在Activity中获取长宽,所以需要通过mContext.getSystemService获取WindowManager,mContext可以通过构造函数传递

下面简单介绍一下WindowManager:
整个Android的窗口机制基于 WindowManager,它是全局的。这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们熟悉的Activity或者Dialog。其实Activity或者Diolog底层的实现也是通过WindowManager来完成的。

你可能感兴趣的:(android)