layout layout-large dpi 分辨率 系統加載影響

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

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

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一下。





發佈了71 篇原創文章 · 獲贊 22 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章