autosize px转dp_今日头条屏幕适配方案(AndroidAutoSize)「建议收藏」

autosize px转dp_今日头条屏幕适配方案(AndroidAutoSize)「建议收藏」鸿洋提出的屏幕适配AndroidAutoLayout,目前已经停止维护,故不建议使用下面我做了一下简单的梳理,便于自己更好的掌握,多谢大神为我们做的贡献!AndroidAutoSize和AndroidAutoLayout的区别:AndroidAutoLayout只能使用px作为布局单位,而AndroidAutoSize恰好相反,在布局中dp、sp、pt、in、mm所有的单位都能…

大家好,又见面了,我是你们的朋友全栈君。

鸿洋提出的屏幕适配AndroidAutoLayout,目前已经停止维护,故不建议使用

下面我做了一下简单的梳理,便于自己更好的掌握,多谢大神为我们做的贡献!

AndroidAutoSize 和 AndroidAutoLayout 的区别:

AndroidAutoLayout 只能使用 px 作为布局单位,而 AndroidAutoSize 恰好相反,在布局中 dp、sp、pt、in、mm 所有的单位都能支持,唯独不支持 px,这也意味着 AndroidAutoSize 和 AndroidAutoLayout 在项目中可以共存,互不影响,所以使用 AndroidAutoLayout 的老项目也可以放心的引入 AndroidAutoSize,慢慢的完成屏幕适配框架的切换

下面主要介绍下今日头条的适配方案:

AndroidAutoSize 在使用上非常简单,只需要填写设计图尺寸这一步即可接入项目,但需要注意的是,AndroidAutoSize 有两种类型的布局单位可以选择,一个是 主单位 (dp、sp),一个是 副单位 (pt、in、mm),两种单位面向的应用场景都有不同,也都有各自的优缺点:

主单位: 使用 dp、sp 为单位进行布局,侵入性最低,会影响其他三方库页面、三方库控件以及系统控件的布局效果,但 AndroidAutoSize 也通过这个特性,使用 ExternalAdaptManager 实现了在不修改三方库源码的情况下适配三方库的功能

副单位: 使用 pt、in、mm 为单位进行布局,侵入性高,对老项目的支持比较好,不会影响其他三方库页面、三方库控件以及系统控件的布局效果,可以彻底的屏蔽修改 density 所造成的所有未知和已知问题,但这样 AndroidAutoSize 也就无法对三方库进行适配

一、主单位的使用方式:

主单位 的 Demo 在 demo

将 AndroidAutoSize库 依赖入项目后,只要在 app 的 AndroidManifest.xml 中填写上设计图尺寸,无需其他过多配置 (如果你没有其他自定义需求的话),AndroidAutoSize 即可自动运行,像下面这样:

android:name=”design_width_in_dp”

android:value=”360″/>

android:name=”design_height_in_dp”

android:value=”640″/>

在使用主单位时,design_width_in_dp 和 design_height_in_dp 的单位必须是 dp,如果设计师给你的设计图,只标注了 px 尺寸,那请自行将 px 尺寸转换为 dp 尺寸。

如果你只是想使用 AndroidAutoSize 的基础功能,AndroidAutoSize 的使用方法在这里就结束了,但是作为一个全面性的屏幕适配框架,在保证基础功能的简易性的同时,也必须保证复杂的需求也能在框架内被解决,那么所有的全局配置选项在 Demo 中都有介绍,每个 API 中也都有详细的注释,在这里就不过多介绍了

自定义 Activity

在 AndroidManifest.xml 中填写的设计图尺寸,是整个项目的全局设计图尺寸,但是如果某些 Activity 页面由于某些原因,设计师单独出图,这个页面的设计图尺寸和在 AndroidManifest.xml 中填写的设计图尺寸不一样的解决方法:让这个页面的 Activity 实现 CustomAdapt 接口即可实现你的需求,CustomAdapt 接口的第一个方法可以修改当前页面的设计图尺寸,第二个方法可以切换当前页面的适配基准:

public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {

/**

* 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选择一个作为基准进行适配)

*

* @return {@code true} 为按照宽度进行适配, {@code false} 为按照高度进行适配

*/

@Override

public boolean isBaseOnWidth() {

return false;

}

/**

* 这里使用 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 的方式,这里 展示了使用方式,以及详细的注释

二、副单位的使用:

基本使用

先在 app 的 AndroidManifest.xml 中填写上设计图尺寸,design_width_in_dp 和 design_height_in_dp 的单位,可以直接填写设计图的 px 尺寸,这是 副单位的 特性之一,可以帮助大家提高开发效率

android:name=”design_width_in_dp”

android:value=”1080″/>

android:name=”design_height_in_dp”

android:value=”1920″/>

由于 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 这四种单位的模拟设备创建方法请看 这里

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134957.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月5日 下午11:36
下一篇 2022年6月5日 下午11:46


相关推荐

  • 如何在uReport2的SQL语句中添加查询参数并且访问报表页面

    如何在uReport2的SQL语句中添加查询参数并且访问报表页面nbsp nbsp nbsp nbsp nbsp nbsp nbsp 相信看过第二章 link uReport2 报表工具的基础使用及注意事项 的读者们应该对 uReport2 的基础操作会有所了解的 本章就开始讲述一下 如何在 uReport2 的 SQL 语句中添加查询参数并且访问报表页面 一 添加查询参数 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 因为 uReport2 的编写入口支持表达式解析 不难想到可以用 的方式进行编写 当然 此处需要借助 param

    2026年3月20日
    3
  • 全球最大手游源码共享网站_传奇手游开发定制

    全球最大手游源码共享网站_传奇手游开发定制今天分享个最简单,最直接的游戏源码和教程最容易搭建的一键端,改几个IP就可以了,纯小白也能搭建成功。服务器系统:win82008企业版我的配置:2H4G2M教程开始:直接解压到D盘解压完的路径是这样的D:\MTJ(记得检查下,不要有任何操作)第一步,打开【JAVA一键环境设置】,点击一键【环境变量】,设置成功第二步,打开【phpStudy】文件,打开文件夹【huluxia】把里面的文件…

    2026年4月13日
    5
  • python怎么读取xlsx文件_arcgis地理加权回归

    python怎么读取xlsx文件_arcgis地理加权回归空间计量经济学打破大多数经典统计和计量分析中相互独立的基本假设,主要解决如何在横截面数据和面板数据的回归模型中处理空间相互作用(空间自相关)和空间结构(空间不均匀性)分析的问题。空间计量经济理论认为一个地区空间单元上的某种经济地理现象或某一属性值与邻近地区空间单元上同一现象或属性值是相关的。也就是说,各区域之间的数据存在与时间序列相关相对应的空间相关。空间计量模型所研究的空间效应包括空间自相关和空…

    2022年8月31日
    4
  • 小米6解BL锁教程申请BootLoader解锁教程

    小米6解BL锁教程申请BootLoader解锁教程*小米6线刷兼救砖_解账户锁_纯净刷机包_教程*远程解锁一、准备工作1、注册小米账号:点击注册(已有小米账号请忽视)2、在手机中登陆【小米账号】3、下载并解压【小米解锁工具】或点击这里下载安装二、开始解锁1打开【小米解锁官网】:http://www.miui.com/unlock/,点击【立即解锁】,输入【小米账号】,点击【立即登录】,填写好上诉信息后,…

    2022年5月23日
    111
  • 《静功总说》陈撄宁

    《静功总说》陈撄宁作者 boks 链接 https www jianshu com p ccdcc0ec4381 来源 简书著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 中华道家修炼筑基法 先从静功开始 其实修炼过程的每一步功夫 都离不开静功的作用 无论是起初入手 最末了手 还是中间过程的各个环节 其中每一不同层次和同一层次的不同侧面 都是静功在起主导作用 因此也可以把道家修炼总体称

    2026年3月17日
    2
  • 月之暗面Kimi发布《Attention Residuals》技术报告 获马斯克等硅谷人士高度评价

    月之暗面Kimi发布《Attention Residuals》技术报告 获马斯克等硅谷人士高度评价

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号