layout layout-large dpi 分辨率 系统加载影响

来源:互联网 发布:.net.cn域名怎么样 编辑:程序博客网 时间:2024/04/26 06:32

手机屏幕大小不一,这也就需要不同的布局资源来对不同屏幕进行适配,小屏用小屏的布局,大屏用大屏的布局。

那么系统如何区分大小屏,确定大小屏后,哪些参数又会影响布局的加载呢?

api上讲的比较详细,我们摘出其中一部分,并进行深入剖析。API地址:点击打开链接

在阅读正文之前,需要基础的知识:dp、dpi、px、分辨率这四个基本概念。什么,屏幕大小、dp、dpi的概念还不知道,辣么,叔告诉你,你该看一下叔的这篇文章:点击打开链接

一、屏幕大小区分:

最早使用屏幕大小来区分的,不过google发现不合适,大屏分辨率不行显示不清楚啊。So,采用了新的方式来规定大小屏幕:

屏幕分类:

SizesmallResources for small size screens.normalResources for normal size screens. (This is the baseline size.)largeResources for large size screens.xlargeResources for extra-large size screens.

屏幕大小界限:

xlarge screens are at least 960dp x 720dplarge screens are at least 640dp x 480dpnormal screens are at least 470dp x 320dpsmall screens are at least 426dp x 320dp

可见,屏幕大小不用尺寸、分辨率来区分了,是dp。。

二、拿到一部手机,如何看它是否是大屏手机

看他的分辨率和dpi,知道dpi之后,就可以换算屏幕的大小了。这里再来看一下google对dpi定的标准值:

ldpiResources for low-density (ldpi) screens (~120dpi).mdpiResources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)hdpiResources for high-density (hdpi) screens (~240dpi).xhdpiResources for extra-high-density (xhdpi) screens (~320dpi).xxhdpiResources for extra-extra-high-density (xxhdpi) screens (~480dpi).xxxhdpiResources for extra-extra-extra-high-density (xxxhdpi) uses (~640dpi). Use this for the launcher icon only, see note above.nodpiResources for all densities. These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen's density.tvdpiResources for screens somewhere between mdpi and hdpi; approximately 213dpi. This is not considered a "primary" density group. It is mostly intended for televisions and most apps shouldn't need it—providing mdpi and hdpi resources is sufficient for most apps and the system will scale them as appropriate. If you find it necessary to provide tvdpi resources, you should size them at a factor of 1.33*mdpi. For example, a 100px x 100px image for mdpi screens should be 133px x 133px for tvdpi.
标准dpi是160dpi对应mdpi。

上一个例子说明:现手机dpi:480,分辨率:1080x1960;那么这个手机是大屏还是小屏还是超大屏呢?

手机的dp和px关系:dp = 480/160=3(此文章详细讲解了换算原理点击打开链接),啦么屏幕分辨率换算成dp是多少:1080px x 1960px = 1080/3dp x 1960/3 dp = 360dp x 650dp。

对照一部分的表,是normal,虽然比normal大但是不算large,large上写了:至少大于640dp x 480dp

三、对layout加载其他因素

处理屏幕大小会影响layout加载,系统的配置也会影响。不是说屏幕大小确定了,就一帆风顺了。

1.系统mk对资源文件的配置:

2.系统mk对dpi的配置:

手机系统配置文件XX.mk文件会配置基本的信息,其中包括使用哪些资源文件及手机的dpi。

PRODUCT_AAPT_CONFIG := normal large xlarge mdpi 420dpi xxhdpi
上面看到,配置了normal、large、xlarge的资源,没有配置small的资源(这个对应屏幕大小),那么,即使你的手机是samll的手机,也加载不到small的layout。

同样,如果没有配置large、xlarge,手机是lagre的也加载不到large资源的layout。

dpi同样也是在手机中配置的:lcd_density=480

这个就是手机的默认dpi。


可能遇到的问题:手机中有:设置--显示大小--最小

这个修改的是dpi,可能将你的dpi改的比较小,那么你的手机就可能变成了大屏手机(自己换算)。

那么如果你的mk也配置了large,就会加载layout-larege了。这样在最小情况下,显示就和非最小的情况不一样了。存在差异,这点需要care一下。





原创粉丝点击