目录
简介
Autosize今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案。
使用
引用
implementation 'me.jessyan:autosize:1.2.1'(可以去官网看看是否有最新的版本)
配置
<meta-data
android:name="design_width_in_dp"
android:value="宽" />
<meta-data
android:name="design_height_in_dp"
android:value="高" />
在AndroidManifest.xml文件中的<application></application>标签内部配置,其中value值的宽高指的是UI效果图的实际分辨率(效果图与标注图分辨率必须一致),横竖屏切换置换宽高的配置。实际使用配置如下图:
使用
布局.xml
在布局中直接使用dp与sp去适配就好,没有什么好说的直接上例子
代码.java
在实际代码中我这边使用的的一个感觉比较使用的方法AutoSizeConfig.getInstance(),主要用来配置横竖屏分辨率,具体使用如下:
//屏幕适配监听器
AutoSizeConfig.getInstance().setOnAdaptListener(new onAdaptListener() {
@Override
public void onAdaptBefore(Object target, Activity activity) {
//使用以下代码, 可以解决横竖屏切换时的屏幕适配问题
//首先设置最新的屏幕尺寸,ScreenUtils.getScreenSize(activity) 的参数一定要不要传 Application !!!
AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(activity)[0]);
AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(activity)[1]);
//根据屏幕方向,设置设计尺寸
if (activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
//设置横屏设计尺寸
AutoSizeConfig.getInstance()
.setDesignWidthInDp(1280)
.setDesignHeightInDp(800);
} else {
//设置竖屏设计尺寸
AutoSizeConfig.getInstance()
.setDesignWidthInDp(800)
.setDesignHeightInDp(1280);
}
}
@Override
public void onAdaptAfter(Object target, Activity activity) {
}
});
代码中的800与1280是我这边的设计稿分辨率。
若有想了解更多的可以去看一下源码:https://github.com/JessYanCoding/AndroidAutoSize
官方文档:一种极低成本的Android屏幕适配方式
总结
AutoSize使用比较简单使用,代码改动代价小,容易上手。
文章主要是我这边自身的使用总结,写的比较简单,使用是主要以参考为主,具体的需要结合使用者自身需求而定,也可以参考官方文档。
补充
在AndroidX上出现这样的错误
Rejecting re-init on previously-failed class
java.lang.Class<me.jessyan.autosize.FragmentLifecycleCallbacksImpl>:
java.lang.NoClassDefFoundError: Failed resolution of:
Landroid/support/v4/app/FragmentManager$FragmentLifecycleCallbacks;
解决方法
在gradle.properties文件中添加 “android.enableJetifier=true”,表示将依赖包也迁移到androidx
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true