最近做乙個專案需要適配到不同的平板和手持裝置上,在螢幕適配上遇到了一些問題,查了android官方文件了解了一些技巧的,現在總結如下:
先解釋幾個概念:
1、dpi(dot per inch),即每英吋畫素,所有的android裝置都會被分成120(low),160(medium),240(high),320(xhigh)四種,後來隨著市場上android裝置越來越多,google官方又增加了213(added in api level13),480(added in api level16),640(added in api level18),三種dpi。比如320*240解析度的螢幕物理尺寸2英吋*1.5英吋,dpi=160;
2、dp或dip(density-independent pixel)邏輯密度計算單位,與畫素的換算方式為px=dp*(dpi/160)。
px=dp*(dpi/160) // dp轉px3、那麼dpi計算公式簡化成dp = px * (160 / dpi) // px轉dp
dpi=(√(橫向解析度^2+縱向解析度^2))/螢幕尺寸備註:android下dpi其實是人為在android/device/softwinner/astar-common/astar-y3.mk中設定的,
也可以通過 adb shell getprop ro.sf.lcd_density 獲得。
adb shell getprop ro.sf.lcd_density
在android3.2以前,所有的資源檔案都有相應的xhdpi,hdpi,mdpi,ldpi四種檔案來對應,android3.2以後,為了提供更精準的對布局檔案的控制,可以通過為資源檔案(res目錄下檔案)增加字尾來指定該資料夾裡的xml布局檔案或color.xml,string.xml是為哪種大小的螢幕使用。
第一種字尾:swdp,如layout-sw600dp, values-sw600dp
這裡的sw代表smallwidth的意思,當你所有螢幕的最小寬度都大於600dp時,螢幕就會自動到帶sw600dp字尾的資源檔案裡去尋找相關資源檔案,這裡的最小寬度是指螢幕寬高的較小值,每個螢幕都是固定的,不會隨著螢幕橫向縱向改變而改變。
第二種字尾wdp 如layout-w600dp, values-w600dp
帶這樣字尾的資源檔案的資源檔案制定了螢幕寬度的大於ndp的情況下使用該資源檔案,但它和swdp不同的是,當螢幕橫向縱向切換時,螢幕的寬度是變化的,以變化後的寬度來與n相比,看是否使用此資源檔案下的資源。
第三種字尾hdp 如layout-h600dp, values-h600dp
這個字尾的使用方式和wdp一樣,隨著螢幕橫縱向的變化,螢幕高度也會變化,根據變化後的高度值來判斷是否使用hdp ,但這種方式很少使用,因為螢幕在縱向上通常能夠滾動導致長度變化,不像寬度那樣基本固定,因為這個方法靈活性不是很好,google官方文件建議盡量少使用這種方式。
參考:1、android layout布局計算公式 layout-sw***dp計算方法
2、android螢幕適配小技巧swdp
Android螢幕適配小技巧swdp
android螢幕適配小技巧swdp 最近做乙個專案需要適配到不同的平板和手持裝置上,在螢幕適配上遇到了一些問題,查了android官方文件了解了一些技巧的,現在總結如下 先解釋幾個概念 1 dpi dot per inch 即每英吋畫素,所有的android裝置都會被分成120 low 160 m...
Android螢幕適配小技巧swdp
最近做乙個專案需要適配到不同的平板和手持裝置上,在螢幕適配上遇到了一些問題,查了android官方文件了解了一些技巧的,現在總結如下 先解釋幾個概念 1 dpi dot per inch 即每英吋畫素,所有的android裝置都會被分成120 low 160 medium 240 high 320 ...
Android螢幕適配小技巧swdp
最近做乙個專案需要適配到不同的平板和手持裝置上,在螢幕適配上遇到了一些問題,查了android官方文件了解了一些技巧的,現在總結如下 先解釋幾個概念 1 dpi dot per inch 即每英吋畫素,所有的android裝置都會被分成120 low 160 medium 240 high 320 ...