先講述一些屏幕適配相關概念,而後介紹下3種主要的適配方案以及優缺點。android
主要介紹一些適配方案,至於佈局編碼注意的問題,不詳細介紹了。api
- 使用 「wrap_content」 和 「match_parent」 尺寸值而不是硬編碼的尺寸,視圖就會相應地僅使用自身所需的空間或展開以填滿可用空間。
- weight是線性佈局的一個獨特的屬性,咱們可使用這個屬性來按照比例對界面進行分配。
- 使用相對佈局,禁用絕對佈局。等等...
適配目的是使得某一元素在Android不一樣尺寸、不一樣分辨率的手機上具有相同的顯示效果。佈局
設定一個基準的分辨率,也就是設計圖對應的分辨率,其餘分辨率都根據這個基準分辨率來計算,在不一樣的尺寸文件夾內部,根據該尺寸編寫對應的dimens文件。ui
基準分辨率 1280x720 對應的dimes文件:編碼
- 寬度爲720,將任何分辨率的寬度整分爲720份,取值爲x1-x720
- 高度爲1280,將任何分辨率的高度整分爲1280份,取值爲y1-y1280
那麼對於1080*1920的分辨率的dimens文件來講,寬度以下:.net
- x1=(1080/720)*1=1.5px
- x2=(1080/720)*2=3px
...- x719=(1080/720)*719=1078.5px
- x720=(1080/720)*720=1080px
以下分別爲分辨率 1280x720 與 1920x1080 所對應的橫向dimens.xml 文件: 插件
smallestWidth適配,或者叫sw限定符適配。指的是Android會識別屏幕可用高度和寬度的最小尺寸的dp值(其實就是手機的寬度值),而後根據識別到的結果去資源文件中尋找對應限定符的文件夾下的資源文件。 smallestWidth 限定符 和寬高限定符適配原理上是同樣的,都是系統經過特定的規則來選擇對應的文件。設計
插件ScreenMatch自動生成dimes文件 一種很是好用的Android屏幕適配orm
優勢:cdn
- smallestWidth 限定符比屏幕分辨率限定符須要少許 dimens.xml 文件
- smallestWidth 限定符適配採用的單位是 dp 和 sp。屏幕分辨率限定符采用px。
- 屏幕分辨率限定符須要精準命中才能適配,而 smallestWidth 限定符適配尋找 dimens.xml 文件的原理是從大往小找,即便沒有徹底匹配也能達到不錯的適配效果。
- 侵入性高,在全部地方都須要引用。
- 仍是沒有辦法覆蓋全部的機型分辨率,部分機型可能適配效果仍是不佳。
- 不能以高度爲基準進行適配。
- 生成不少文件,增大APP體積1~2M。
今日頭條屏幕適配方案的核心原理在於,動態計算density,經過系統api,將density賦值給系統,拋棄掉系統默認計算density的計算公式。 公式:
如何使用 今日頭條屏幕適配方案
優勢
- 使用成本很是低,操做很是簡單
- 侵入性很是低
- 可適配三方庫的控件和系統的控件
- 會全局影響APP的控件大小,例如一些第三方庫控件,他們設計的時候可能設計圖尺寸並非像咱們同樣是375dp,這樣就會致使控件大小變形等一些問題。 當某個系統控件或三方庫控件的設計圖尺寸和和咱們項目自身的設計圖尺寸差距很是大時,這個問題就越嚴重。