在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