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

前言

在Android開發(fā)中,因為碎片化的問題,屏幕適配是一個非常頭痛的問題,因而為了去進行屏幕適配,作為程序員,是嘔心瀝血,歷經(jīng)磨難,哈哈

我們之前做屏幕適配一般都會用到一下兩種方式:

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

    ├── src/main
    │   ├── res
    │   ├── ├──values
    │   ├── ├──values-800x480
    │   ├── ├──values-860x540
    │   ├── ├──values-1024x600
    │   ├── ├──values-1024x768
    │   ├── ├──...
    │   ├── ├──values-2560x1440
    

    就是這種,在資源文件下生成不同分辨率的資源文件,然后在布局文件中引用對應(yīng)的 dimens,大家一定還有印象

  2. 第二種就是 鴻神 的 AndroidAutoLayout

這兩種方案都已經(jīng)逐漸退出了歷史的舞臺,為什么想必大家都知道,不知道的建議看看 拉丁吳 老師的文章,現(xiàn)在最主流的兩種屏幕適配方案,今日頭條適配方案smallestWidth 限定符適配方案,下面介紹一個框架,采用的是今日頭條適配方案傳送門

框架使用效果





使用方式

第一步: 在module的build.gradle文件下做如下依賴

implementation 'me.jessyan:autosize:0.9.5'

第二步: 在 AndroidManifest 中填寫全局設(shè)計圖尺寸 (單位 dp),如果使用副單位,則可以直接填寫像素尺寸,不需要再將像素轉(zhuǎn)化為 dp

<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>

經(jīng)過上面兩個步驟,框架就對你所有的頁面進行適配了

當我們的設(shè)計圖尺寸與在 AndroidManifest 中填寫的全局設(shè)計圖尺寸不同時,我們可以對具體頁面進行手動適配

Activity

  • 當某個 Activity 的設(shè)計圖尺寸與在 AndroidManifest 中填寫的全局設(shè)計圖尺寸不同時,可以實現(xiàn) CustomAdapt 接口擴展適配參數(shù):
public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {

    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
  • 當某個 Activity 想放棄適配,請實現(xiàn) CancelAdapt 接口:
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {

}

Fragment

  • 首先開啟支持 Fragment 自定義參數(shù)的功能
AutoSizeConfig.getInstance().setCustomFragment(true);
  • 當某個 Fragment 的設(shè)計圖尺寸與在 AndroidManifest 中填寫的全局設(shè)計圖尺寸不同時,可以實現(xiàn) CustomAdapt 接口擴展適配參數(shù):
public class CustomAdaptFragment extends Fragment implements CustomAdapt {

    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
  • 當某個 Fragment 想放棄適配,請實現(xiàn) CancelAdapt 接口:
public class CancelAdaptFragment extends Fragment implements CancelAdapt {

}
  • 可以在 pt、in、mm 這三個冷門單位中,選擇一個作為副單位,副單位是用于規(guī)避修改 DisplayMetrics#density 所造成的對于其他使用 dp 布局的系統(tǒng)控件或三方庫控件的不良影響,使用副單位后可直接填寫設(shè)計圖上的像素尺寸,不需要再將像素轉(zhuǎn)化為 dp
AutoSizeConfig.getInstance().getUnitsManager()
        .setSupportDP(false)
        .setSupportSP(false)
        .setSupportSubunits(Subunits.MM);

ProGuard

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

最后貼上我自己測試的Demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容