🔥 A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案).
其他三方库:AndroidX 和 Support 您只能选择其一! AndroidAutoSize: 不,我全都要!
重大更新: 同时兼容 Androidx 和 Support, 框架会根据您项目的依赖情况自动选择对应的 Library,并应用不同的处理逻辑,使用 AndroidX 和 Support 的新旧项目都可以放心的升级到 v1.2.0,升级并不会对您的老项目造成任何影响。
优化在 InitProvider 中初始化 AndroidAutoSize 时 Application 可能为 null 的问题。
新增对 Configuration.screenWidthDp 和 Configuration.screenHeightDp 的修改,将 screenWidthDp 和 screenHeightDp 修改为适配后的屏幕 dp 尺寸,以便于使用者和三方库获取到适配后的正确屏幕尺寸。 https://github.com/JessYanCoding/AndroidAutoSize/commit/2d071d3203821587e97cc149865c541d7f45585b
提升 Gradle 到 v5.4.1。
新增: 添加 AutoSize#checkAndInit(Application) 方法, 保证 AndroidAutoSize 在异常情况下也能够正常初始化。
优化: 在初始时给设计图尺寸设置默认值。
修复: 小米手机适配失效的问题。
优化: LogUtils 更名为 AutoSizeLog 避免与其他同名的日志工具类冲突。
新增: 添加 AutoSizeConfig#setExcludeFontScale 方法调整 APP 内字体大小的放大比例, 区别于系统字体大小的放大比例, 可以全局调节 APP 内字体的大小。
更新: Android SDK 版本提升为 29。
新增: Androidx Demo。
@Override
public Resources getResources() {
AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources());//如果没有自定义需求用这个方法
AutoSizeCompat.autoConvertDensity((super.getResources(), 667, false);//如果有自定义需求就用这个方法
return super.getResources();
}
很多人都在询问我,如何让 App 内的字体大小不跟随系统设置中字体大小的改变,AndroidAutoSize 本身是不支持这个需求的,因为在我看来你如果不想让 App 内的字体大小跟随系统字体的大小进行改变,那不使用 sp 作为字体大小的单位即可,为何即要用 sp 又不想使用 sp 的特性,这不是自相矛盾吗,那你用 sp 的意义何在呢?所以我并没有给出这个需求的解决方案,虽然我没有给出解决方案,但这并不妨碍他们自己动手,自己尝试解决问题的行为值得鼓励,于是他们尝试使用以下代码解决这个需求
@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}
由于 DisplayMetrics 是全局的,AndroidAutoSize 这刚刚才修改了 density,你这一来就 setToDefaults(),将所有参数设为默认值,这不冲突才怪呢,这下冲突了就又来找我了... 我能怎么办?我也很无奈啊!我让你不使用 sp,你又觉得我敷衍你,好吧,作为一个全面、强大的屏幕适配框架,这个需求我虽然不理解,但既然是人民的需求,我还是尽量满足吧,现在将 AndroidAutoSize 升级到 v1.1.1,使用下面一行代码即可实现这个需求
AutoSizeConfig.getInstance().setExcludeFontScale(true);
1.优化 getRawScreenSize#getScreenSize 中获取屏幕尺寸的方式,在各种异常情况下,让屏幕尺寸也能获取到正确的值
1.增加 onAdaptListener 接口,可监听屏幕适配时的一些事件
AutoSizeConfig.getInstance()..setOnAdaptListener(new onAdaptListener() {
@Override
public void onAdaptBefore(Object target, Activity activity) {
LogUtils.d(String.format(Locale.ENGLISH, "%s onAdaptBefore!", target.getClass().getName()));
}
@Override
public void onAdaptAfter(Object target, Activity activity) {
LogUtils.d(String.format(Locale.ENGLISH, "%s onAdaptAfter!", target.getClass().getName()));
}
});
1.Add AutoSizeConfig#setDesignWidthInDp(int) and AutoSizeConfig#setDesignHeightInDp(int)
1.增加 AutoSize#initCompatMultiProcess(Context),修复 AndroidAutoSize 在多进程下不能初始化的问题