Android开发笔记(三)屏幕分辨率
2015-11-25 13:03
633 查看
在app编码中经常需要获取手机的屏幕分辨率(宽*高),原来我直接上网拷贝代码,但在使用过程中却发现诸多不便。
不便一:下面代码中的getWidth和getHeight在adt上提示deprecated已经废弃了,实在扎眼
查看android源码说可使用getSize替代,于是换成getSize并把代码提炼到工具类中
用了一阵发现又有不便,原因是getWindowManager方法只能在activity中使用或者被activity实例调用,那像我们在Fragment或者Adapter中想获得屏幕分辨率,又有困难了(因为Fragment和Adapter一般只有Context),虽然可以通过强制类型转换来处理,可是毕竟劳民伤财需要时时记得去转换。所以又改了从Context获取系统服务,然后再去取分辨率,改后的代码如下
再后来发现通过DisplayMetrics也能获取分辨率,依网上的做法照猫画虎如下:
不就便发现这个新方法时常量错了,找来找去又自己反复实践,结果确认widthPixels和heightPixels就是宽和高,无需再乘上density。因为widthPixels和heightPixels的单位都是像素,而density指的是像素密度,即一个单位内有几个像素,所以在我这边乘上density没有意义,只有除以density才有意义。dm.widthPixels/dm.densit指的是宽度上有多少单位,dm.heightPixels/dm.density指的是高度上有多少单位。网上乘上density的做法,可能只是他们恰好遇上部分特殊机型罢了。最后的代码如下
不便一:下面代码中的getWidth和getHeight在adt上提示deprecated已经废弃了,实在扎眼
WindowManager wm = getWindowManager(); Display display = wm.getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight();
查看android源码说可使用getSize替代,于是换成getSize并把代码提炼到工具类中
public static Point getSize(Activity act) { Display display = act.getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); //size.x就是宽度,size.y就是高度 return size; }
用了一阵发现又有不便,原因是getWindowManager方法只能在activity中使用或者被activity实例调用,那像我们在Fragment或者Adapter中想获得屏幕分辨率,又有困难了(因为Fragment和Adapter一般只有Context),虽然可以通过强制类型转换来处理,可是毕竟劳民伤财需要时时记得去转换。所以又改了从Context获取系统服务,然后再去取分辨率,改后的代码如下
public static Point getSize(Context ctx) { WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size; }
再后来发现通过DisplayMetrics也能获取分辨率,依网上的做法照猫画虎如下:
public static Point getSizeNew(Context ctx) { WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); Point size = new Point(); size.x = dm.widthPixels*dm.density; size.y = dm.heightPixels*dm.density; return size; }
不就便发现这个新方法时常量错了,找来找去又自己反复实践,结果确认widthPixels和heightPixels就是宽和高,无需再乘上density。因为widthPixels和heightPixels的单位都是像素,而density指的是像素密度,即一个单位内有几个像素,所以在我这边乘上density没有意义,只有除以density才有意义。dm.widthPixels/dm.densit指的是宽度上有多少单位,dm.heightPixels/dm.density指的是高度上有多少单位。网上乘上density的做法,可能只是他们恰好遇上部分特殊机型罢了。最后的代码如下
public static Point getSizeNew(Context ctx) { WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); Point size = new Point(); size.x = dm.widthPixels; size.y = dm.heightPixels; return size; }
相关文章推荐
- Android TextView属性
- 【Android】获取设备型号、SDK版本及其系统版本
- Android 截图问题之截长图
- Android启动页面有白色过渡解决方案
- <4>Android HAL层 基础及调用
- Android学习笔记(二):layout_weight的解读
- Android各种包的功能预览
- android
- Android TextView与html的结合使用 一个控件显示多种文字
- Android监听键盘显示和隐藏
- Android基于ViewPager Fragment实现选项卡
- 【转载】Android端百度地图API使用详解
- Android Studio新手经验
- Android 使用viewpager实现无限循环(定时+手动)
- 【Android】Fragment的生命周期详解
- Android应用插件式开发解决方法
- Android中常见的热门标签的流式布局的实现——云标签
- Android:Fresco体验(一):Android Studio导入Fresco
- 【Android】边框旁的文字实现模糊效果
- A2DP Sink, AVRCP Controller and HFP Client in Android L