#適配問題的緣由java
##根本緣由android
因爲Android系統的開放性,任何用戶、開發者、OEM廠商、運營商均可以對Android進行定製,修改爲他們想要的樣子.
因此帶來了碎片化的問題.隨着平板,手錶,電視等等的設備加入,致使碎片化日益嚴重.git
##直接緣由github
屏幕尺寸不一樣,像素密度不一樣,分辨率不一樣,沒法根據某一原則或者屬性進行統一的適配api
#適配的基礎概念網絡
##屏幕尺寸佈局
屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸=2.54釐米(好比常見的屏幕尺寸有2.四、2.八、3.五、3.七、4.二、5.0、5.五、6.0等)字體
##屏幕分辨率.net
屏幕分辨率是指在橫縱向上的像素點數,單位是px,1px=1個像素點。通常以縱向像素橫向像素(如19601080)設計
##屏幕像素密度
屏幕像素密度是指每英寸上的像素點數,單位是dpi,即「dot per inch」的縮寫。屏幕像素密度與屏幕尺寸和屏幕分辨率有關,在單一變化條件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
##px、dip、dpi、sp、dp
px咱們應該是比較熟悉的,前面的分辨率就是用的像素爲單位,大多數狀況下,好比UI設計、Android原生API都會以px做爲統一的計量單位,像是獲取屏幕寬高等。
##dip,dp
dip和dp是一個意思,都是Density Independent Pixels的縮寫,即密度無關像素.
假如一英寸裏面有160個像素,這個屏幕的像素密度就是160dpi
在Android中,規定以160dpi爲基準,1dip=1px,若是密度是320dpi,則1dip=2px,以此類推。
##sp
即scale-independent pixels,與dp相似,可是能夠根據文字大小首選項進行放縮,是設置字體大小的御用單位。
##dpi(mdpi、hdpi、xdpi、xxdpi)
mdpi、hdpi、xdpi、xxdpi用來修飾Android中的drawable文件夾及values文件夾,用來區分不一樣像素密度下的圖片和dimen值。
##Google官方指定按照下列標準進行區分:
名稱 像素密度範圍 圖標尺寸 mdpi 120dpi~160dpi 48x48px hdpi 160dpi~240dpi 72x72px xhdpi 240dpi~320dpi 96x96px xxhdpi 320dpi~480dpi 144x144px xxxhdpi 480dpi~640dpi 192x192px
#適配的解決方案
##多套layout(不多用了)
android3.0以前,適配指定分辨率,將layout文件夾作以下命名:
layout layout-1024x768 layout-1024x600 layout-1280x768
android3.0之後,需將高度減去48像素,即底部狀態欄的高度:
layout layout-1024x720 layout-1024x552 layout-1280x720
根據不一樣屏幕尺寸加載不一樣的xml佈局 每一個佈局根據相應分辨率改寫長寬,達到適配的效果 不過感受很麻煩 本人一直都沒使用過......
##權重適配
經過android中線性佈局中的屬性(layout_weight權重) 按比例來分配. 注意:同一線性佈局下 若是有的控件沒有標註layout_weight屬性 則會優先未標註的控件 剩餘部分會按照權重比例來分配剩餘控件
我的感受這個很經常使用 配合其餘適配方法一塊兒寫比較省時省力 因爲這個很常見 就很少贅述了
##谷歌出的百分比適配
你們請看SDK中extras/android/support/percent/libs就會發現這個android-support-percent.jar
結合代碼一塊兒看就明白了
傳送門:點擊進入
##AutoLayout適配
這個是張鴻陽作的,我以爲很是厲害,本身也用了還不錯,不過在代碼里根據屏幕dp和px的比例設置寬高的時候會有問題.
傳送門:點擊進入
##java代碼適配
經過android相應api獲取當前手機的寬高像素值,按比例分配屏幕中控件的寬高以達到適配效果。
##dimens.xml文件適配
在layout的xml中 引用dimens,而後在values文件夾內建立多個適應不一樣屏幕的values.xml 在不一樣屏幕中,會根據加載不一樣的dimens文件中的引用屬性長度,達到適配效果
常見命名方式
values values-1024×1920 values-hdpi values-hdpi-728×480 values-sw600dp (sw表明最小寬度)
#參考資料
##移動設備統計信息
傳送門:點擊進入
##本文是對其餘網絡文章作了刪改並總結.
傳送門:參考博客