网络文章我收藏的Android开发文章精选案例

Android屏幕适配框架-(今日头条终极适配方案)

2018-09-14  本文已影响548人  sweetying

前言

在Android开发中,因为碎片化的问题,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈

我们之前做屏幕适配一般都会用到一下两种方式:

  1. 第一种就是宽高限定符适配,什么是宽高限定符适配呢

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

    就是这种,在资源文件下生成不同分辨率的资源文件,然后在布局文件中引用对应的 dimens,大家一定还有印象

  2. 第二种就是 鸿神 的 AndroidAutoLayout

这两种方案都已经逐渐退出了历史的舞台,为什么想必大家都知道,不知道的建议看看 拉丁吴 老师的文章,现在最主流的两种屏幕适配方案,今日头条适配方案smallestWidth 限定符适配方案,下面介绍一个框架,采用的是今日头条适配方案传送门

框架使用效果





使用方式

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

implementation 'me.jessyan:autosize:0.9.5'

第二步: 在 AndroidManifest 中填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 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>

经过上面两个步骤,框架就对你所有的页面进行适配了

当我们的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,我们可以对具体页面进行手动适配

Activity

public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {

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

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {

}

Fragment

AutoSizeConfig.getInstance().setCustomFragment(true);
public class CustomAdaptFragment extends Fragment implements CustomAdapt {

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

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
public class CancelAdaptFragment extends Fragment implements CancelAdapt {

}
AutoSizeConfig.getInstance().getUnitsManager()
        .setSupportDP(false)
        .setSupportSP(false)
        .setSupportSubunits(Subunits.MM);

ProGuard

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

最后贴上我自己测试的Demo

上一篇 下一篇

猜你喜欢

热点阅读