鸿洋提交的屏幕符合AndroidAutoLayout,目前已停止维护,不推荐
今日顶级配型方案AndroidAutoSize框架链接: https://www.Jian Shu.com/p/4a 23 d 69 d 48和关于此方案的文章: https://www.Jian Shu.com
我做了简单的整理,让自己能更好地掌握。 感谢上帝为我们做出了贡献。
安卓授权与安卓授权的区别:
AndroidAutoLayout只能使用px作为布局单位,而AndroidAutoSize则相反,布局支持所有单位dp、sp、pt、in和mm,但仅支持px 也就是说,AndroidAutoSize和AndroidAutoLayout互不影响,所以使用AndroidAutoLayout的旧项目也可以放心地部署AndroidAutoSize,慢慢地进行屏幕拟合
这里主要介绍今天标题的适合方案。
AndroidAutoSize在使用上非常简单,只需填写设计图大小的步骤即可访问项目,而AndroidAutoSize有两种类型的光线:主单位(dp,sp )和副单位(pt,in,mm )
主单元:以dp、sp为单位进行布局,入侵性最低,影响其他三方库页面、三方库控件和系统控件的布局效果,但AndroidAutoSize也影响此特性
子单元:以pt、in、mm为单位布局,入侵性强,老项目支持好,不影响其他三方库页面、三方库控件和系统控件的布局效果
一、主要单位使用方法:
主单元的Demo在Demo上
使AndroidAutoSize库依赖于项目后,只要在app的AndroidManifest.xml中输入设计图的大小,而不需要进行其他所需的配置,AndroidAutoSize就会自动运行,如下所示:
使用主单位时,design_width_in_dp和design_height_in_dp的单位必须为dp。 如果设计师给的设计图只列出了px尺寸,请自行将px尺寸转换为dp尺寸。
如果您只是想使用AndroidAutoSize的基本功能,AndroidAutoSize的使用方法到此结束。 但是,作为一个全面的屏幕适配框架,在保证基本功能简易性的同时,还必须能够在框架内解决复杂的需求。 所有全局配置选项都在Demo中介绍,每个API也有详细的注释。 在这里
自定义活动
AndroidManifest.xml中的工程图大小是整个项目的全局工程图大小,但如果某些Activity页面出于某种原因由设计者单独打印。 如果此页面上的工程图大小与AndroidManifest.xml中的工程图大小不同,请使用此页面上的Activity实现自定义adapt界面来满足您的需要。 CustomAdapt界面的第一种方法允许您调整当前页面的设计图大小,第二种方法允许您切换当前页面的拟合标准。
publicclasscustomadaptactivityextendsappcompatactivityimplementscustomadapt {
//*
*是否按比例拟合宽度(仅相对于宽度和高度之一拟合,以确保即使在qxdjj比例不同的屏幕上也能正常拟合) )。
*
* @return {@code true}是根据宽度的拟合,{@code false}是根据高度的拟合
*/
@Override
公共布尔型isbaseonwidth (
返回假;
}
//*
*这里使用iPhone的设计图。 iPhone的设计图尺寸为750px * 1334px,高度换算为dp为667(1334px/2=667DP )
*
*返回设计图的设计尺寸、单位dp
* {@link #getSizeInDp}必须与{@link#isbaseonwidth(} )配合使用。 规则是:
*{@link#isbaseonwidth(}应该返回{@code true},{@link #getSizeInDp}返回设计图的总宽度
>* 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度
* 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0}
*
* @return 设计图上的设计尺寸, 单位 dp
*/
@Override
public float getSizeInDp() {
return 667;
}
}
如果某个 Activity 想放弃适配,让这个 Activity 实现 CancelAdapt 接口即可,比如修改 density 影响到了老项目中的某些 Activity 页面的布局效果,这时就可以让这个 Activity 实现 CancelAdapt 接口
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {
}
自定义 Fragment
Fragment 的自定义方式和 Activity 是一样的,只不过在使用前需要先在 App 初始化(Apllication)时开启对 Fragment 的支持
AutoSizeConfig.getInstance().setCustomFragment(true);
实现 CustomAdapt
public class CustomAdaptFragment extends Fragment implements CustomAdapt {
@Override
public boolean isBaseOnWidth() {
return false;
}
@Override
public float getSizeInDp() {
return 667;
}
}
实现 CancelAdapt
public class CancelAdaptFragment extends Fragment implements CancelAdapt {
}
适配三方库页面:
在使用主单位时可以使用 ExternalAdaptManager 来实现在不修改三方库源码的情况下,适配三方库的所有页面 (Activity、Fragment),这个需求 AndroidAutoSize 也已经为你考虑好了,当然不会让你将三方库下载到本地然后改源码!
通过 ExternalAdaptManager.addExternalAdaptInfoOfActivity(Class, ExternalAdaptInfo) 将需要自定义的类和自定义适配参数添加进方法即可替代实现 CustomAdapt 的方式,这里 展示了使用方式,以及详细的注释
二、副单位的使用:
副单位 的 Demo 在 demo-subunits
基本使用
先在 app 的 AndroidManifest.xml 中填写上设计图尺寸,design_width_in_dp 和 design_height_in_dp 的单位,可以直接填写设计图的 px 尺寸,这是 副单位的 特性之一,可以帮助大家提高开发效率
由于 AndroidAutoSize 提供了 pt、in、mm 三种类型的 副单位 供使用者选择,所以在使用 副单位 时,还需要在 APP 初始化时,通过 UnitsManager.setSupportSubunits(Subunits) 方法选择一个你喜欢的副单位,然后在布局文件中使用这个副单位进行布局,三种类型的副单位,其实效果都是一样,大家按喜欢的名字选择即可
由于使用副单位是为了彻底屏蔽修改 density 所造成的对三方库页面、三方库控件以及系统控件的布局效果的影响,所以在使用副单位时建议调用 UnitsManager.setSupportDP(false) 和 UnitsManager.setSupportSP(false),关闭 AndroidAutoSize 对 dp 和 sp 的支持
UnitsManager 的详细使用方法,在 demo-subunits 中都有展示,注释也十分详细
三、布局实时预览:
在开发阶段布局时的实时预览是一个很重要的环节,很多情况下 Android Studio 提供的默认预览设备并不能完全展示我们的设计图,所以我们就需要自己创建模拟设备,dp、pt、in、mm 这四种单位的模拟设备创建方法请看 这里