在Android開發中,屏幕適配是一個很是頭痛的問題,於是爲了去進行屏幕適配,做爲程序員,是嘔心瀝血,歷經磨難,哈哈html
咱們以前作屏幕適配通常都會用到一下兩種方式:java
咱們以前作屏幕適配通常都會用到一下兩種方式:android
第一種就是寬高限定符適配,什麼是寬高限定符適配呢git
├── src/main │ ├── res │ ├── ├──values │ ├── ├──values-800x480 │ ├── ├──values-860x540 │ ├── ├──values-1024x600 │ ├── ├──values-1024x768 │ ├── ├──... │ ├── ├──values-2560x1440
就是這種,在資源文件下生成不一樣分辨率的資源文件,而後在佈局文件中引用對應的 dimens,你們必定還有印象程序員
第二種就是 鴻神 的AndroidAutoLayoutgithub
這兩種方案都已經逐漸退出了歷史的舞臺,爲何想必你們都知道,不知道的建議看看拉丁吳老師的文章,如今最主流的兩種屏幕適配方案,今日頭條適配方案和smallestWidth限定符適配方案,下面介紹一個框架,採用的是今日頭條適配方案傳送門app
第一步: 在module的build.gradle文件下作以下依賴框架
implementation 'me.jessyan:autosize:0.9.5'
第二步: 在 AndroidManifest 中填寫全局設計圖尺寸 (單位 dp),若是使用副單位,則能夠直接填寫像素尺寸,不須要再將像素轉化爲 dpide
<manifest> <application> <meta-data android:name="design_width_in_dp" android:value="360"/> <meta-data android:name="design_height_in_dp" android:value="640"/> </application> </manifest>
通過上面兩個步驟,框架就對你全部的頁面進行適配了佈局
當咱們的設計圖尺寸與在 AndroidManifest 中填寫的全局設計圖尺寸不一樣時,咱們能夠對具體頁面進行手動適配
當某個 Activity 的設計圖尺寸與在 AndroidManifest 中填寫的全局設計圖尺寸不一樣時,能夠實現 CustomAdapt 接口擴展適配參數:
public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt { @Override public boolean isBaseOnWidth() { return false; } @Override public float getSizeInDp() { return 667; } }
當某個 Activity 想放棄適配,請實現 CancelAdapt 接口:
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt { }
首先開啓支持 Fragment 自定義參數的功能
AutoSizeConfig.getInstance().setCustomFragment(true);
當某個 Fragment 的設計圖尺寸與在 AndroidManifest 中填寫的全局設計圖尺寸不一樣時,能夠實現 CustomAdapt 接口擴展適配參數:
public class CustomAdaptFragment extends Fragment implements CustomAdapt { @Override public boolean isBaseOnWidth() { return false; } @Override public float getSizeInDp() { return 667; } }
當某個 Fragment 想放棄適配,請實現 CancelAdapt 接口:
public class CancelAdaptFragment extends Fragment implements CancelAdapt { }
能夠在 pt、in、mm 這三個冷門單位中,選擇一個做爲副單位,副單位是用於規避修改 DisplayMetrics#density 所形成的對於其餘使用 dp 佈局的系統控件或三方庫控件的不良影響,使用副單位後可直接填寫設計圖上的像素尺寸,不須要再將像素轉化爲 dp
AutoSizeConfig.getInstance().getUnitsManager() .setSupportDP(false) .setSupportSP(false) .setSupportSubunits(Subunits.MM);
-keep class me.jessyan.autosize.** { *; } -keep interface me.jessyan.autosize.** { *; }
github項目地址:https://github.com/JessYanCoding/AndroidAutoSize