Android hdpi,xhdpi,xxhdpi 屏幕适配

来源:互联网 发布:c语言某一位取反 编辑:程序博客网 时间:2024/06/16 19:31

一、drawable-dpi文件夹图片尺寸比例

我们都知道安卓系统会根据不同的手机的分辨率去取不同文件夹里的图片,但是具体这些文件夹里放什么尺寸比例的图片,怕是不少人都没有关注过吧。可能有人会说,这是UI部门该了解的事,那如果UI部门的同学也不知道呢,那该怎么办。这种情况我就遇到过一次 = =!

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75
以mdpi为基准,相同切图,hdpi文件夹里的图应该是mdpi的1.5倍,xhdpi文件夹里的图应该是mdpi的2倍,以此类推,只有根据这个比例来放切图,在不同分辨率手机上展示才会相对协调。PS: xxhdpi: 3.0,xxxhdpi: 4.0


Question: 那是不是一种切图,所有的dpi文件夹都要放一份呢?

Developer Training: Note: Low-density (ldpi) resources aren’t always necessary. When you provide hdpi assets, the system scales them down by one half to properly fit ldpi screens.

也就是说,低分辨率的切图并不是必须的。在ldpi的设备上,需要一张切图,如果你的工程ldpi文件夹没有提供相对应的图,不要方,只要hdpi文件夹有对应的图,安卓就会帮你自动把hdpi长宽缩减一半,供ldpi的设备使用,从而保证适配。当然你只给xhdpi也是一样会按相应比例缩放。但是如果你只放ldpi或hdpi的切图,靠安卓系统自动帮你放大就有可能出现图片模糊的问题,低清图片放大出现马赛克的道理大家都懂。至于是只放一个较高dpi文件夹的切图还是全放,就是时间换空间或空间换时间的问题了,仁者见仁智者见智吧。


二、如何知道手机是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
switch (getResources().getDisplayMetrics().densityDpi) {case DisplayMetrics.DENSITY_LOW:    // ...    break;case DisplayMetrics.DENSITY_MEDIUM:    // ...    break;case DisplayMetrics.DENSITY_HIGH:    // ...    break;case DisplayMetrics.DENSITY_XHIGH:    // ...    break;}
----from StackOverFlow

当然还有更好的办法啦!不用写代码,不用run!快使用adb!

Windows环境下在Android Studio的Terminal里输入adb shell dumpsys | findStr mBaseDisplay 

(Mac 把"findStr"替换成"grep"即可)


DPI:每英寸像素数

简单的屏幕分辨率计算方法:

DisplayMetrics metrics = new DisplayMetrics();
Display display = this.getWindowManager().getDefaultDisplay();
display.getMetrics(metrics);
Log.e("display", "高:"+display.getHeight()+"宽:"+display.getWidth()+"屏幕密度比:"+metrics.density);


阅读全文
0 0
原创粉丝点击