android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项

 

 
问题2:如果切图放错文件夹会有什么问题?
如果放错文件夹,系统会进行相应的缩放,使图片进行错误的缩放。例如hdpi的图片放到mdpi中,在hdpi的手机显示,会比原图片大
 
问题3:720p图片相关问题?
 
设计给切图,最好根据那个dpi呢?是都可以吗?一般应该给480*800的hdpi的切图。这样对于mdpi,可以自动缩小。图像显示质量不受影响。对于xdpi,放大幅度不大,图像显示质量影响较小。
 
那么为什么不用xhdpi呢,这样都是缩小图像不是更好吗?有两个理由,一是增大了apk的尺寸,另一个就是容易引起切图的变形,影响显示。主要是对于.9的图片,有对某一方向进行了压缩,如果设置时,拉伸区域太小,再压缩时可能变形。当然这也不是绝对的,可以通过增大.9.png文件的拉伸区域来实现。
或许还有个理由,xhpi的机型比较不占多数。
 
2、dp工作原理
 
     最关键要记住一个公式:
     android在计算pixel值时会首先判断屏幕的密度。如果我们把mdpi设为1,则hdpi就等于1.5. 如果我们使用dp为单位,android在转换为pixel时会依据下面公式:
 
     px = dp * density;
 
 
    dp表示独立像素密度,所谓独立,就是不依赖与屏幕的密度。
     从本质上来看,dp其实表示是相同的物理长度,注:不是以像素为单位,而是以inch为单位。
     例如对于mdpi,长度为m inch的屏幕,其像素数为n1,dp数为n2. 对于hdpi,也是长度为m inch,包含的像素数为n1 * 1.5. 根据公式可以算出,其dp值为n1 * 1.5 / 1.5 = n1. 对于xhdpi的也是n1.
 
     即:相同的物理长度其dp值相同。
 
 
     
从表象上看,dp可以表示一个相同的比例
也就是在ldpi、mdpi、hdpi和xdpi的屏幕密度中,用同一个dp值,可以表示相同的比例。
 
     请注意:是比例而不是尺寸。因为UI设计中,我们最关心的是一个视图相对于整个屏幕的比例,例如:在mdpi中,某TextView的长度占屏幕宽度的1/2,假设屏幕的宽度像素为320pixel,那么TextView为160pixel。而在hdpi中,我们需要该TextView也占到屏幕的1/2,才能称之为适应了不同的屏幕密度。为了实现这个目标,Android提供了dp的概念。
 
     我们把dip为160(mdpi)的屏幕与dp一一对应起来,即mdpi屏幕中,1个pixel就等于1个dp。通常,mdpi的屏幕宽度为320pixel,所以其屏幕宽度为320dp。
 
     那么在hdpi屏幕中,其宽度通常为480pixel。其1/2为240pixel。如果用pixel表示,我们就需要使用两个值(mdpi:160px,hdpi:240px),而我们又只能输入1个值。这个问题该如何解决?
 
 
 
     这样对于mdpi,160dp对应的px为160*1 = 160,为屏幕宽度320px的一半。而对于hdpi,160dp对应的px为160*1.5 = 240px,也为屏幕宽度480px的一半。这样,我们用一个值:160dp,实际上表示了两个像素:160px和240dp。
 
     再进一步分析:由于相同长度下(1inch),hdpi和mdpi的像素数比值为一个定值(1.5),那么hdpi和mdpi都截取相同的比例(n/m),其比值还是1.5.这时,我们把mdpi的一个像素看成单位1,则hdpi就是1.5.也就是说要表示相同的比例,那么hdpi和mdpi的像素比值必须为1.5.现在,我们让android操作系统替我们记录下这个比值,我们就用以mdpi为单位1进行计数(重新创建一个单位:dp)。当使用时,我们只写出dp值,然后由操作系统自动乘上这个比值。这样,1个dp表示的数值可以表示一个标准的比例了。
 
     简单的说:其实dp表示的是一个比例。在mdpi中1dp表示1/320, 在hdpi中1dp也表示1/320.由android操作系统利用density在后台重新计算保证了相同的dp值能够表示相同的比例。
 
      注:上述说法也是有限制的。dp表示比例还必须要有一个前提,那就是屏幕的尺寸和密度必须满足下面的条件:
mdpi:3.5inch,320*480, hdpi:4.0inch,480*800或480*854,xhdpi:4.5inch,720*1280.即使是这样,也只能保证mdpi和hdpi有相同的比例,而xhdpi则不能。以满屏宽度为例,mdpi和hdpi都是320dp,而xhdpi为360dp。
 
     那么既然dp也仅仅是特殊情况才能保持相同的比例,那么是不是用处就大打折扣了呢?
 
     要记住,android屏幕适配终究是相对的,因为尺寸太多,不可能完全适配,所以我们只适配大众的,数量最多的。现在数量最多也就是上述尺寸,其他的都是小众。因此针对上述屏幕进行ui设计,可以满足大部分手机的ui正常。
 
     其他尺寸的手机怎么办?
     我们应该记住这个原则:尽量少用dp定义具体宽度。
 
     为什么是宽度?因为我们常见的ui元素,其宽度都是不固定的。高度可以固定。如各种button。我们尽量用dp来表示间隔,而用fill_parent、wrap_parent、weight等属性来使UI进行自动填充。我们需要的是一个适当的比例,而不是精确的尺寸。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值