Android取得长宽的问题
2016-02-19 10:19
531 查看
今天在重写View时遇到一个问题,在构造函数中使用getWidth()时为0,而在onDraw函数中却可以取到值。一番搜索后终于知道了原因:
下面简单介绍一下WindowManager:
整个Android的窗口机制基于 WindowManager,它是全局的。这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们熟悉的Activity或者Dialog。其实Activity或者Diolog底层的实现也是通过WindowManager来完成的。
当一个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来完成的。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories