天天看點

layout layout-large dpi 分辨率 系統加載影響一、螢幕大小區分:二、拿到一部手機,如何看它是否是大屏手機三、對layout加載其他因素

手機螢幕大小不一,這也就需要不同的布局資源來對不同螢幕進行适配,小屏用小屏的布局,大屏用大屏的布局。

那麼系統如何區分大小屏,确定大小屏後,哪些參數又會影響布局的加載呢?

api上講的比較詳細,我們摘出其中一部分,并進行深入剖析。API位址:點選打開連結

在閱讀正文之前,需要基礎的知識:dp、dpi、px、分辨率這四個基本概念。什麼,螢幕大小、dp、dpi的概念還不知道,辣麼,叔告訴你,你該看一下叔的這篇文章:點選打開連結

一、螢幕大小區分:

最早使用螢幕大小來區分的,不過google發現不合适,大屏分辨率不行顯示不清楚啊。So,采用了新的方式來規定大小螢幕:

螢幕分類:

Size	small	Resources for small size screens.
normal	Resources for normal size screens. (This is the baseline size.)
large	Resources for large size screens.
xlarge	Resources for extra-large size screens.
           

螢幕大小界限:

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
           

可見,螢幕大小不用尺寸、分辨率來區分了,是dp。。

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

看他的分辨率和dpi,知道dpi之後,就可以換算螢幕的大小了。這裡再來看一下google對dpi定的标準值:

ldpi	Resources for low-density (ldpi) screens (~120dpi).
mdpi	Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi	Resources for high-density (hdpi) screens (~240dpi).
xhdpi	Resources for extra-high-density (xhdpi) screens (~320dpi).
xxhdpi	Resources for extra-extra-high-density (xxhdpi) screens (~480dpi).
xxxhdpi	Resources for extra-extra-extra-high-density (xxxhdpi) uses (~640dpi). Use this for the launcher icon only, see note above.
nodpi	Resources 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.
tvdpi	Resources 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一下。