Android hdpi,xhdpi,xxhdpi一些你没注意到的事

一、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"即可)


Tips : "density 320"对应DENSITY_XHIGH,“density 480"对应DENSITY_XXHIGH,更多参见http://developer.android.com/reference/android/util/DisplayMetrics.html

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值