1、 android開(kāi)發(fā)時(shí)會(huì)涉及到多屏幕適應(yīng)的問(wèn)題。
如果你的開(kāi)發(fā)環(huán)境的sdk版本是android3.2以及以上的版本便可以用這個(gè)sw屬性對(duì)設(shè)備進(jìn)行區(qū)分。600dp的含義是:代表這個(gè)設(shè)備的最短的那一邊。以我手上的平板為例(分辨率是1024x720,密度是1)。求這個(gè)設(shè)備的最短邊??赡苡腥苏f(shuō)是720。這個(gè)答案是不正確的。答案是768,這個(gè)答案隨著設(shè)備不同而不同。
獲取設(shè)備的最短邊的代碼是:
Configuration config = getResources().getConfiguration();
int smallestScreenWidth = config.smallestScreenWidthDp;
這樣就獲取了設(shè)備的最短邊了。這個(gè)時(shí)候拿smallestScreenWidth 與600想比較就可以知道該設(shè)備能否讀取里面的資源了。
2、api文檔的說(shuō)明
先解釋幾個(gè)概念:
1、dpi(dot per inch),
即每英寸像素所有的android設(shè)備都會(huì)被分成120(low)、160(medium)、240(high)、320(xhigh)四種,后來(lái)隨著市場(chǎng)上android設(shè)備越來(lái)越多,google官方又增加了213(Added in API level13),480(Added in API level16),640(Added in API level18),三種dpi。比如320x240分辨率的屏幕物理尺寸2英寸*1.5英寸,dpi=160;
2、dp或dip(density-independent pixel)
邏輯密度計(jì)算單位,與像素的換算方式為px=dp*(dpi/160)。
在android3.2以前,所有的資源文件都有相應(yīng)的xhdpi,hdpi,mdpi,ldpi四種文件來(lái)對(duì)應(yīng),android3.2以后,為了提供更精準(zhǔn)的對(duì)布局文件的控制,可以通過(guò)為資源文件(res目錄下文件)增加后綴來(lái)指定該文件夾里的xml布局文件或color.xml,string.xml是為哪種大小的屏幕使用。
第一種: sw<N>dp
如layout-sw600dp, values-sw600dp
這里的sw代表smallwidth的意思,橫豎屏切換時(shí)較小的screenWidthDp。當(dāng)你設(shè)備的smallestScreenWidth值大約N時(shí),屏幕就會(huì)自動(dòng)到帶sw600dp后綴的資源文件里去尋找相關(guān)資源文件,每個(gè)屏幕都是固定的,不會(huì)隨著屏幕橫向縱向改變而改變。
第二種后綴: w<N>dp
如layout-w600dp, values-w600dp
帶這樣后綴的資源文件的資源文件制定了getResources().getConfiguration().screenWidthDp大于Ndp的情況下使用該資源文件,但它和sw<N>dp不同的是,當(dāng)屏幕橫向縱向切換時(shí),screenWidthDp是變化的,以變化后的寬度來(lái)與N相比,看是否使用此資源文件下的資源。
第三種后綴: h<N>dp
如layout-h600dp, values-h600dp
這個(gè)后綴的使用方式和w<N>dp一樣,隨著屏幕橫縱向的變化,屏幕高度也會(huì)變化,根據(jù)變化后的高度值來(lái)判斷是否使用h<N>dp ,但這種方式很少使用,因?yàn)槠聊辉诳v向上通常能夠滾動(dòng)導(dǎo)致長(zhǎng)度變化,不像寬度那樣基本固定,因?yàn)檫@個(gè)方法靈活性不是很好,google官方文檔建議盡量少使用這種方式。