MagicScreenAdapter

Introduction: 不写一句代码做好屏幕适配
More: Author   ReportBugs   
Tags:

依赖本库不用写一句代码做好屏幕适配:

本适配方案使用今日头条的适配方案;
预览的时候建议使用(Nexus5,xxhdpi,1920x1080,360dp 宽度)的屏幕分辨率预览;

布局预览是什么样在任何设备都是这个样子!

布局预览是什么样在任何设备都是这个样子!

布局预览是什么样在任何设备都是这个样子!

(重要的事情说三遍)

(宽度一致,高度随设备变化,控件不要以底部为锚点依赖,否则在短屏幕上可能会和顶部依赖的控件重叠)      
最好给布局外面套一个 ScrollView 作为适配,不论是短屏幕还是分屏,页面可以适配各种情况      
这里的宽度定义是指物理意义上的屏幕宽度,跟屏幕朝向无关!

声明:

本框架以布局预览为标准,跟设计图无关
您之前怎么把设计图转换成布局还是按照以前方式来

  • 假设设计图尺寸 720px,预览布局宽度 360dp,假设一个控件 100px 宽度,在布局里写的就是 100*360/720=50dp
  • 本适配方案支持固定尺寸适配,单位 dp 和 sp 都可以,px 不行
  • 查看布局宽度 dp 方法:放一个控件进去,调整控件宽度直到刚好充满布局宽度,此时的控件宽度就是布局预览宽度

如果老项目一直用的其它宽度 dp 预览的布局,
则可以在 Application 里面重设全局预览宽度(单位 dp) 这样可以快速适配老项目:

MagicScreenAdapter.initDesignWidthInDp(380);

以下内容如果您的布局预览都是是统一的,请忽略!


如果某个 Activity 或者 Fragment 不想启用适配功能, 请在类上使用注解:@IgnoreScreenAdapter;
如果某个 Activity 或者 Fragment 有单独的预览宽度(单位 dp), 请在类上使用注解:@ScreenAdapterDesignWidthInDp(400); 如果一个 Activity 同时展示多个 Fragment ,并且 Fragment 之间
或者 Fragment 和 Activity 之间的适配 宽度不一致,则
会导致后续 view 的变化会以最后一个 Fragment 为准,解决方案:
view 变化时,请用代码指定适配布局宽度:

MagicScreenAdapter.adapt(this, 360); //指定后续 view 变化的适配宽度
MagicScreenAdapter.cancelAdapt(this);//或者后续 view 取消适配
// this 为指定 view 所在 Fragment 或者 Activity

依赖方法:

1.在全局 build 里面添加下面 github 仓库地址

buildscript {
    ...
    dependencies {
    ...
    //java 用这个
    classpath 'cn.leo.plugin:magic-plugin:1.0.0' 

    //kotlin 或者 AS 版本低于 3.0 用下面这个
    classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0' 
    }
}
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

google()和 jcenter()这两个仓库一般是默认的,如果没有请加上

2.在 app 的 build 里面添加插件和依赖

//java 用这个
apply plugin: 'cn.leo.plugin.magic' 

//kotlin 或者 AS 版本低于 3.0 用下面这个
apply plugin: 'android-aspectjx'  
...
dependencies {
    ...
    implementation 'com.github.jarryleo:MagicScreenAdapter:v1.5'
}

上面 2 个 build 里面的 java 和 kotlin 二选一,如果 AS 版本低于 3.0 请使用 kotlin 版本 用于支持 kotlin 的插件用的是 aspectjx
感谢原插件作者
因为编织所有二进制文件的问题导致编译速度慢的问题,请查看原作者提供的解决方案 部分代码来源:https://blankj.com/2018/07/30/easy-adapt-screen/?tdsourcetag=s_pctim_aiomsg

Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea