当前位置:   article > 正文

android中 mdpi,hdpi,xhdpi,xxhdpi等文件的深入理解_hdpi mdpi xhdpi

hdpi mdpi xhdpi

mdpi               120~160dpi              48*48px

hdpi                160~240dpi              72*72px

xhdpi               240~320dpi             96*96px  

xxhdpi             320~480dpi             144*144px

xxxhdpi           480~640dpi              192*192px

比例   

1      :1.5  :   2   :    3      :   4  

mdpi:hdpi:xhdpi:xxhdpi :xxxhdpi

这个比例之前一直不明白具体含义:今天做了个demo,算是理解了。

设备:华为Mate7,屏幕尺寸为 6 inch,分辨率为1920*1080,首先计算出对角线分辨率为2202,除以6得到367,因此它的dpi就为367。 对应的分辨率文件夹就是 xxhdpi 。

在以上设备上,对应的xxhdpi文件夹中如果没有所需图片(取名为a.png),而在mdpi文件夹中有的话,那么系统会把该图片的宽和高都放大三倍,然后放在对应位置上。如果hdpi文件中有的话,那就放大两倍。如果两个文件夹都有的话,按照较高分辨率也就是hdpi的来。那如果xxxhdpi中也有呢?

我都亲自尝试了一遍,理出逻辑:

系统加载图片是,会优先寻找对应文件夹的图片,本例中就是xxhdpi文件,如果没有,则按照xxxhdpi ---> xhdpi ---> hdpi ---> mdpi 的顺序进行查找,直至找到为止。

另:如何知道手机是hdpi,xhdpi,还是xxhdpi?

density = getResources().getDisplayMetrics().density;
 
// return 0.75 if it's LDPI
// return 1.0 if it's MDPI
// return 1.5 if it's HDPI
// return 2.0 if it's XHDPI
// return 3.0 if it's XXHDPI
// return 4.0 if it's XXXHDPI

  1. switch (getResources().getDisplayMetrics().densityDpi) {
  2. case DisplayMetrics.DENSITY_LOW:
  3. // ...
  4. break;
  5. case DisplayMetrics.DENSITY_MEDIUM:
  6. // ...
  7. break;
  8. case DisplayMetrics.DENSITY_HIGH:
  9. // ...
  10. break;
  11. case DisplayMetrics.DENSITY_XHIGH:
  12. // ...
  13. break;
  14. }
  1. public class DisplayUtil {
  2. /**
  3. * 屏幕宽度(像素)
  4. * @param ctx
  5. * @return
  6. */
  7. public static int getScreenWidthPx(Context ctx) {
  8. WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  9. DisplayMetrics dm = new DisplayMetrics();
  10. wm.getDefaultDisplay().getMetrics(dm);
  11. return dm.widthPixels;
  12. }
  13. /**
  14. * 屏幕宽度(dp)
  15. * @param ctx
  16. * @return
  17. */
  18. public static int getScreenWidthDp(Context ctx) {
  19. WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  20. DisplayMetrics dm = new DisplayMetrics();
  21. wm.getDefaultDisplay().getMetrics(dm);
  22. int width = dm.widthPixels; // 屏幕宽度(像素)
  23. float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5
  24. int screenWidth = (int) (width / density); // 屏幕宽度(dp)
  25. return screenWidth;
  26. }
  27. /**
  28. *屏幕高度(像素)
  29. * @param ctx
  30. * @return
  31. */
  32. public static int getScreenHeightPx(Context ctx) {
  33. WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  34. DisplayMetrics dm = new DisplayMetrics();
  35. wm.getDefaultDisplay().getMetrics(dm);
  36. return dm.heightPixels;
  37. }
  38. /**
  39. *屏幕高度(dp)
  40. * @param ctx
  41. * @return
  42. */
  43. public static int getScreenHeightDp(Context ctx) {
  44. WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  45. DisplayMetrics dm = new DisplayMetrics();
  46. wm.getDefaultDisplay().getMetrics(dm);
  47. int height = dm.heightPixels; // 屏幕高度(像素)
  48. float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5
  49. int screenHeight = (int) (height / density);// 屏幕高度(dp)
  50. return screenHeight;
  51. }
  52. /**
  53. * 密度(0.75 / 1.0 / 1.5)
  54. * @param ctx
  55. * @return
  56. */
  57. public static float getScreenDensity(Context ctx) {
  58. WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  59. DisplayMetrics dm = new DisplayMetrics();
  60. wm.getDefaultDisplay().getMetrics(dm);
  61. return dm.density;
  62. }
  63. /**
  64. * 像素密度dpi(120 / 160 / 240)
  65. * @param ctx
  66. * @return
  67. */
  68. public static float getScreenDensityDpi(Context ctx) {
  69. WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
  70. DisplayMetrics dm = new DisplayMetrics();
  71. wm.getDefaultDisplay().getMetrics(dm);
  72. return dm.densityDpi;
  73. }
  74. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/962413
推荐阅读
相关标签
  

闽ICP备14008679号