一、drawable-dpi文件夹图片尺寸比例
我们都知道安卓系统会根据不同的手机的分辨率去取不同文件夹里的图片,但是具体这些文件夹里放什么尺寸比例的图片,怕是不少人都没有关注过吧。可能有人会说,这是UI部门该了解的事,那如果UI部门的同学也不知道呢,那该怎么办。这种情况我就遇到过一次 = =!
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
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);