Android屏幕適配框架-(今日頭條終極適配方案)

在Android開發中,屏幕適配是一個很是頭痛的問題,於是爲了去進行屏幕適配,做爲程序員,是嘔心瀝血,歷經磨難,哈哈html

咱們以前作屏幕適配通常都會用到一下兩種方式:java

咱們以前作屏幕適配通常都會用到一下兩種方式:android

  1. 第一種就是寬高限定符適配,什麼是寬高限定符適配呢git

    ├── src/main
    │   ├── res
    │   ├── ├──values
    │   ├── ├──values-800x480
    │   ├── ├──values-860x540
    │   ├── ├──values-1024x600
    │   ├── ├──values-1024x768
    │   ├── ├──...
    │   ├── ├──values-2560x1440
  2. 就是這種,在資源文件下生成不一樣分辨率的資源文件,而後在佈局文件中引用對應的 dimens,你們必定還有印象程序員

  3. 第二種就是 鴻神 的AndroidAutoLayoutgithub

這兩種方案都已經逐漸退出了歷史的舞臺,爲何想必你們都知道,不知道的建議看看拉丁吳老師的文章,如今最主流的兩種屏幕適配方案,今日頭條適配方案和smallestWidth限定符適配方案,下面介紹一個框架,採用的是今日頭條適配方案傳送門app

框架使用效果

 

Pixel 2 XL | 1440 x 2880 | 560dpi:

  

Pixel XL | 1440 x 2560 | 560dpi:

  

Nexus 5X | 1080 x 1920 | 420dpi:

  

Nexus 4 | 768 x 1280 | 320dpi:

  

Nexus S | 480 x 800 | 240dpi:

  

 

 

 

使用方式

第一步: 在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

  • 當某個 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

  • 首先開啓支持 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);

ProGuard

-keep class me.jessyan.autosize.** { *; }
-keep interface me.jessyan.autosize.** { *; }

github項目地址:https://github.com/JessYanCoding/AndroidAutoSize

相關文章
相關標籤/搜索