Android获取屏幕的宽度和高度(dp)

约定不等于承诺〃 2022-08-26 05:58 698阅读 0赞
  1. 一般我们需要的宽度和高度都是需要dp格式,但是在网上找了一大堆的资料基本上得到的宽度和高度都是像素(Pixels)型的宽度和高度,与我们所需要的不一样,后面经过查找资料终于找到解决办法,下面上代码,老鸟勿喷![安静][quiet.gif]
  2. public void getAndroiodScreenProperty(){
  3. WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
  4. DisplayMetrics dm = new DisplayMetrics();
  5. wm.getDefaultDisplay().getMetrics(dm);
  6. int width = dm.widthPixels;// 屏幕宽度(像素)
  7. int height= dm.heightPixels; // 屏幕高度(像素)
  8. float density = dm.density;//屏幕密度(0.75 / 1.0 / 1.5)
  9. int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240)
  10. //屏幕宽度算法:屏幕宽度(像素)/屏幕密度
  11. int screenWidth = (int) (width/density);//屏幕宽度(dp)
  12. int screenHeight = (int)(height/density);//屏幕高度(dp)
  13. Log.e("123", screenWidth + "======" + screenHeight);
  14. }

需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。

比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。

因此,研究之后发现,若没有设定多分辨率支持的话,

Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,

这样的话就大大影响了程序的编码。

所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,如下:

  1. <!-- 得到屏幕正常的物理尺寸 -->
  2. <supports-screens
  3. android:smallScreens="true"
  4. android:normalScreens="true"
  5. android:largeScreens="true"
  6. android:resizeable="true"
  7. android:anyDensity="true" />

发表评论

表情:
评论列表 (有 0 条评论,698人围观)

还没有评论,来说两句吧...

相关阅读