介绍
AutoSize是基于今日头条的适配方案,该方案很大程度上解决了今日头条适配方案的两个缺点,可以对activity,fragment进行取消适配,避免我们限定符适配写布局或dimen的大量工作,是目前最简单的工业适配框架.
Github地址:AndroidAutoSize
引用How To Use
implementation 'me.jessyan:autosize:1.2.1'
在 AndroidManifest 中填写全局设计图尺寸,如下图.
<application...><meta-dataandroid:name="design_width_in_dp"android:value="1280"/><meta-dataandroid:name="design_height_in_dp"android:value="800"/></application>
当设计图上的尺寸和以上尺寸一致时,到此配置已经全部完成,直接按UI分辨率在使用主单位时,design_width_in_dp 和 design_height_in_dp 的单位必须是 dp计算公式,将px尺寸转换为dp尺寸,如果实在找不到设备的 DPI 那就直接将 px 尺寸除以3或者2,比如我的尺寸就是1920x1200
dp = px / (DPI / 160)
如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp
qus问题: 横屏失效的问题
当使用项目中使用了AutoSize进行页面适配时, 有时候需求会有横竖屏幕切换的需求,这是时候就有问题出现了。
我们一般都是在Manifes或者代码中配置的宽高基准, 然而当手机旋转的时候就不适用了, 因为竖屏和横屏的宽高恰好相反, 这就导致页面适配出现了问题slove
所以我们需要监听屏幕适配器, 根据屏幕的宽高来设置适配基准, 一般是在application中进行监听设置
//autoSize kotlinAutoSizeConfig.getInstance().onAdaptListener = object : onAdaptListener {override fun onAdaptBefore(target: Any, activity: Activity) {AutoSizeConfig.getInstance().screenWidth = ScreenUtils.getScreenSize(activity)[0]AutoSizeConfig.getInstance().screenHeight = ScreenUtils.getScreenSize(activity)[1]if (activity.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {//根据屏幕方向,设置适配基准AutoSizeConfig.getInstance().designWidthInDp = 1280//设置横屏基准} else {AutoSizeConfig.getInstance().designWidthInDp = 800//设置竖屏基准}}override fun onAdaptAfter(target: Any?, activity: Activity?) {}}