屏幕適配小結

values-sw600dp文件標題的理解

1,  android開發時會涉及到多屏幕適應的問題。

如果你的開發環境的sdk版本是android3.2以及以上的版本便可以用這個sw屬性對設備進行區分。600dp的含義是:代表這個設備的最短的那一邊。以我手上的平板爲例(分辨率是1024x720,密度是1)。求這個設備的最短邊。可能有人說是720。這個答案是不正確的。答案是768,這個答案隨着設備不同而不同。獲取設備的最短邊的代碼是:Configuration config = getResources().getConfiguration();

  int  smallestScreenWidth = config.smallestScreenWidthDp;

這樣就獲取了設備的最短邊了。這個時候拿smallestScreenWidth 與600想比較就可以知道該設備能否讀取裏面的資源了。

2,api文檔的說明

先解釋幾個概念:
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)。
 
 
在android3.2以前,所有的資源文件都有相應的xhdpi,hdpi,mdpi,ldpi四種文件來對應,android3.2以後,爲了提供更精準的對佈局文件的控制,可以通過爲資源文件(res目錄下文件)增加後綴來指定該文件夾裏的xml佈局文件或color.xml,string.xml是爲哪種大小的屏幕使用。
第一種後綴:sw<N>dp,如layout-sw600dp, values-sw600dp
這裏的sw代表smallwidth的意思,當你所有屏幕的最小寬度都大於600dp時,屏幕就會自動到帶sw600dp後綴的資源文件裏去尋找相關資源文件,這裏的最小寬度是指屏幕寬高的較小值,每個屏幕都是固定的,不會隨着屏幕橫向縱向改變而改變。
第二種後綴w<N>dp 如layout-w600dp, values-w600dp
帶這樣後綴的資源文件的資源文件制定了屏幕寬度的大於Ndp的情況下使用該資源文件,但它和sw<N>dp不同的是,當屏幕橫向縱向切換時,屏幕的寬度是變化的,以變化後的寬度來與N相比,看是否使用此資源文件下的資源。
第三種後綴h<N>dp 如layout-h600dp, values-h600dp
這個後綴的使用方式和w<N>dp一樣,隨着屏幕橫縱向的變化,屏幕高度也會變化,根據變化後的高度值來判斷是否使用h<N>dp ,但這種方式很少使用,因爲屏幕在縱向上通常能夠滾動導致長度變化,不像寬度那樣基本固定,因爲這個方法靈活性不是很好,google官方文檔建議儘量少使用這種方式。


Android適配方案小結

2.1 values文件夾
可以在工程下創建不同的values文件夾:values-sw480dp, values-sw600dp, 
values-sw720dp-land等。比如一個控件的寬度,在10寸pad上是10dp,在8寸pad
上是5dp。這時,你可以定義一個變量,button_width,然後在values-sw600dp
下寫5dp,在values-sw720-land下寫
10dp。這樣就達到了在不同尺寸pad上,
相應控件大小不一樣的效果。



Android:設計之屏幕適配

據統計目前市場Android手機的分辨率有是10餘種,分辨率如此廣泛使得我們在處理分辨率適應方便遇到不少難題,本文就此難點記錄設計與實際佈局中的解決技巧。

 

以320x480爲藍本設計佈局

因爲Android佈局的時候一般用dp爲單位,而我們設計的時候一般用px爲單位,這涉及到單位轉換問題,而在mdpi下,屏幕密度爲160,px和dp是1:1關係,即1px =1dp(dpi/160),

所以爲了更方便轉換,在進行設計的時候,可以優先以mdpi,即320x480px爲藍本進行設計。

 

 還有別忘了手機頭頂的狀態欄高度了

 

 

那麼當我們用photoshop測量間距是10px時,就可以在佈局裏面標註10dp。

對應關係表
資源文件夾 屏幕分辨率 類型 對應圖標尺寸 屏幕密度 1dp
xhdpi  超高分辨率              1280*720  WQVGA 96*96  320 =2
hdpi   高分辨率              480*800  WVGA 72*72  240 =1.5
mdpi  中等分辨率 480*320 HVGA、VGA 48*48      160 =1
ldpi    低分辨率 320*240 QVGA 36*36 120 =0.75

Android:佈局單位換算 >>

 

爲不同的屏幕尺寸提供不同的圖片:

默認情況下,Android會縮放.png、 .jpg、.gif文件和.9.png,使其呈現合適的尺寸,如果沒有匹配資源可用,將使用默認資源或其他密度相關資源進行縮放。默認資源指的是沒有限定符的資源(在drawable/ 下的就是是默認的資源)。 而縮放可能讓它們失真,所以爲了讓圖片有最好的展示,應該爲不同屏幕密度提供不同大小的圖片。如果提供一套圖至少提供更高分辨率高密度的位圖而不是提供哪些中等密度設計的位圖。

Android工具:延展圖片NinePatch>>

 

 

在res/目錄下創建一個不同的layout文件夾、values文件夾、drawable文件夾等資源文件夾

資源文件夾命名:資源名-屬性1-屬性2-屬性3-屬性4-屬性5.....( values-ldpi、values-land-mdpi)

即以<resources_name>-<qualifier>格式命名系統會根據屏幕的大小自己選擇合適的進行使用。

其中resources_name資源名就是資源類型名,包括:drawable, values, layout, anim, raw, menu, color, animator, xml;

<qualifier> 是一個配置限定符,指定對應的屏幕參數,限定符可以參考以下表:

手機特性 資源限定符 描述
屏幕尺寸 small 小尺寸屏幕
normal 正常大小的屏幕
large 大尺寸屏幕
xlarge 超大尺寸的屏幕
分辨率 320x240 values-ldpi-320x240
480x320 values-480x320
800x480 values-800x480
854x480 values-854x480
960x540 values-960x540、values-hdpi-960x540
960x640 values-960x640、values-xhdpi-960x640
1024x600 values-mdpi-1024x600
1280x720、1280x800 values-1280x720
其他 values-xhdpi-1184x768、values-xhdpi-1280x720、values-xhdpi-1920x1080
密度 ldpi 低密度~120dpi
mdpi 中密度~160dpi
hdpi 高密度~240dpi、
xhdpi 超高密度〜320dpi 、
nodpi 存放無視屏幕密度的資源,如:一些不能被拉伸的圖片放在 drawable-nodpi ,但寬和高要寫wrap_content
tvdpi 主要用於電視,大多數App不需要用到
方向 land 橫向屏幕
port 縱向屏幕
版本 v1~v19 新建工程時可以看見,API 1到API 19

假設需要適應320x240,480x320分辨率。在res目錄下新建文件夾values-320x240, values-480x320。然後在文件夾 values ,values-320x240 和  values-480x320 下新建xml文件dimens.xml設置字體大小、寬、高等屬性。Android 系統會根據當前設備的屏幕大小、分辨率、屏幕密度、方向、長寬比等信息,選擇相應文件夾進行加載。

注意的是:

values在values-ldpi之前先找到,系統認爲values比values-ldpi更接近。

 

多分辨率兼容性測試

自己定製AVD作爲應用程序的測試環境,模擬真實機器大大小和密度,

佈局文件可以在預覽看到效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章