您的位置:首页 > 移动开发 > Android开发

Android取得长宽的问题

2016-02-19 10:19 531 查看
今天在重写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