Android屏幕适配

来源:互联网 发布:大掌门神龙教主 数据 编辑:程序博客网 时间:2024/04/29 16:58

     很多同学对android的适配方式都理解的并不到位所以导致很多时候出现例如图片大小在不同设备上差异很大,lisiview在不同屏幕上显示效果差异很大,有些屏幕比较和谐,有些并不是。今天我总结出几个常见问题,并做解答希望能对大家学习android提供帮助。

1.dp是什么?为什么要用dp

2.drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxdpi是什么?

3.layout-large、layout-xlarge、layout-xxlarge 、values-w820dp是什么?为什么我看到别人的代码里有这些东西。


1.首先要解决这些问题首先要了解px(pixel),dpi(dots per inch),dp/dip(device independent pixels ),是什么,以及他们之间的联系。

1.1 px想必大家都清楚,就是显示设备的一个像素点。

1.2 dpi(dots per inch)

    如果直译的话就是每英寸长度有多少个像素点,也就是像素点的密度,通常自从iphone4乔布斯提出视网膜屏(326ppi)的概念后以后中国的手机厂商会经常提到ppi(pixels per inch)像素密度,我记得魅族mx4 pro的ppi值都超500了,也就是说一英寸(2.54CM)的长度就会需要500多个像素点来连接,所以我现在很惊叹现在的工业制造水平。(暂且说ppi和dpi的区别现在可以认为他们是一个意思)。

1.3 dp/dip(device independent pixels)设备非关联先像素(单位)

    可以这样认为:这是一个和设备没有关系的长度单位,是一个虚拟的长度单位,android用他来避免和消除使用同样的长度在不同的设备上显示效果差异过大。其和px以及dpi的转换关系为dp = px/(dpi/160) 他是以160dpi为基准来将像素转换为dp值,可以说在160dpi的屏幕如果用px做单位和用dp做单位效果是相同的。

    下面为几张实例图便于理解dp/dip

    

    可以看到不同屏幕密度的屏幕下px和dp的显示效果是不同的。只有160(mdpi)下px和dp显示效果相同。160px在各个屏幕上长度只能为160px,但是160dp在三个不同

的屏幕上分别代表(利用公式px = dp*(dpi/160))160*(160/160) =160px,160*(240/160)=240px,160*(320/160)=320px


    但是为什么说有了dp/dip可以消除或者避免同一个尺寸在不同屏幕上效果差异过大呢?

    首先句两个例子

     

    但是下面这个例子表现并不同于上面两个

    

    可以看到,320dp在宽度为720像素屏幕像素密度为320ppi时并没有充满屏幕。因为通过上面的公式px = dp*(dpi/160)可以得出此红色矩形宽度为640px,而屏幕实际宽度为720px。

2.其次需要理解ldpi、mdpi、hdpi、xhdpi、xxdpi、xxxdpi

这6种类型的dpi为android抽象出的6种基准屏幕密度,他们的屏幕的密度分别为120dpi、160dpi、240dpi、320dpi、480dpi、640dpi。开发人员可以更具需要对相应的

屏幕尺寸进行适配。具体可以表现为将不同尺寸的图片放置于不同的drawable文件夹下,android会根据运行时的硬件选取相应的资源文件夹下的drawable文件。

但是如果说一个屏幕屏幕密度为326ppi,系统会怎么选取不同drawable下的drawable文件呢?android提供了一个归类的规范。如图:


可以大致归纳出:屏幕密度的范围和各种抽象的屏幕密度标准对应关系   ldpi =(0,120dpi] 、mdpi(120dpi,240dpi]/ hdpi(240dpi,320dpi]、xhdpi(320dpi,480dpi].

也就是说326dpi的屏幕会被android当做xhdpi来对待,会优先选择drawable-xhdpi中的drawable文件。

3.layout-large、layout-xlarge、layout-xxlarge怎么理解?

    类似的android将各种不同的宽度的屏幕也归为small,normal,large,xlarge四种规范


    我们可以按照官方

  • xlarge screens are at least 960dp x 720dp
  • large screens are at least 640dp x 480dp
  • normal screens are at least 470dp x 320dp
  • small screens are at least 426dp x 320dp 
    这几种规范判来配置我们的layout文件以及values内的文件例如dimens.xml文件

0 0
原创粉丝点击