十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AndroidScreenAdaptation高级进阶:如何继承IConversion扩展新属性、定制属于你的适配策略

AndroidScreenAdaptation高级进阶:如何继承IConversion扩展新属性、定制属于你的适配策略 AndroidScreenAdaptation高级进阶如何继承IConversion扩展新属性、定制属于你的适配策略【免费下载链接】AndroidScreenAdaptationA light and easy-to-use Android development screen adaptation tool library(一个轻量好用的安卓开发屏幕适配工具库)项目地址: https://gitcode.com/gh_mirrors/an/AndroidScreenAdaptation还在为 Android 多机型屏幕适配头疼AndroidScreenAdaptation 是一个轻量好用的安卓开发屏幕适配工具库让你不用改变布局编写习惯就能在各种分辨率、dpi、最小宽度不同的真机上实现预览即所得的精准适配。本教程面向进阶开发者手把手教你继承 IConversion 接口为库扩展新属性如 maxWidth、圆角半径、自定义 View 属性定制真正属于你的屏幕适配策略。为什么需要扩展 IConversionAndroidScreenAdaptation 默认只适配宽、高、padding、layout_margin、字体大小这五类属性。但实际项目中常遇到这些场景布局里使用了minWidth/maxWidth默认策略不会处理自定义 View 完全由代码绘制例如画一个 100dp 的圆属性值没走布局系统公司 UI 规范要求部分特殊属性也参与等比缩放此时就需要理解库的策略模式架构自己编写适配策略。核心架构一个接口 一个抽象基类整个适配体系只有两个核心概念源码都位于screenadaptation/src/main/java/com/yatoooon/screenadaptation/目录下角色文件路径职责适配策略接口conversion/IConversion.java只有一个transform(View, AbsLoadViewHelper)方法定义对哪些属性下手计算助手基类loadviewhelper/AbsLoadViewHelper.java持有设计图宽度、dpi、字体倍数等单位换算参数提供loadWidthHeightFont、loadPadding等现成的属性处理方法库内置了两个现成策略对比一下就能看懂扩展点conversion/SimpleConversion.java只处理宽高、字体、padding、margin默认策略conversion/CustomConversion.java在 Simple 基础上多处理了maxWidth/Height和minWidth/HeightAbsLoadViewHelper的loadView方法会递归遍历整个 ViewGroup 树对每个子 View 调用conversion.transform(...)——也就是说你实现策略后全量递归适配是自动的不需要手动逐层处理。三步写出你的定制适配策略第一步继承 AbsLoadViewHelper补充新属性处理方法以适配圆角为例新建一个类继承LoadViewHelper它位于loadviewhelper/LoadViewHelper.java内部实现了setValue换算逻辑添加自己的属性处理方法即可。换算公式px 单位为实际值 设计图标注值 × (手机实际宽度 / 设计图宽度)这个换算已由基类完成你只需要取值 → 换算 → 设值。第二步实现 IConversion编排你的适配流程参照conversion/CustomConversion.java的写法在transform中调用你需要的属性方法public class MyConversion implements IConversion { Override public void transform(View view, AbsLoadViewHelper helper) { if (view.getLayoutParams() ! null) { helper.loadWidthHeightFont(view); helper.loadPadding(view); helper.loadLayoutMargin(view); // 在这里加入你新增的属性处理 } } }第三步通过 IProvider 入口替换默认 Helper库的初始化入口在ScreenAdapterTools.java中。除了常规的ScreenAdapterTools.init(context)还提供了init(Context, IProvider)重载你可以在IProvider.provide(...)中返回自己继承的 Helper 实例让全局使用定制策略。 如果不想替换全局策略也可以在某个页面单独指定ScreenAdapterTools.getInstance().loadView(view, new MyConversion())。代码绘制的属性怎么办loadCustomAttrValue 一招搞定对于完全由代码绘制的自定义 View没有布局文件库提供了loadCustomAttrValue(int px)方法在ILoadViewHelper.java接口中定义。找到你获取属性值的地方直接包一层即可circleRadius ScreenAdapterTools.getInstance().loadCustomAttrValue(circleRadius);自定义 View 在布局中使用时记得用if (!isInEditMode())包裹loadView调用否则 XML 预览会报错真机不受影响。完整示例可参考app/src/main/java/com/yatoooon/androidscreenadaptation/CustomView.java。定制策略的实用避坑清单单位必须统一unit配置为px就全项目用 px为dp就全用 dp字体不要用 sp微信、QQ 的字体都不随系统缩放旋转分屏要 reset在Application#onConfigurationChanged中调用ScreenAdapterTools.getInstance().reset(this)参考示例app/src/main/java/com/yatoooon/androidscreenadaptation/App.java0 和 1 不做换算LoadViewHelper.setValue中对 0、1 值直接返回匹配match_parent、wrap_content场景你的自定义方法也建议保持一致反射取不到就静默跳过utils/ViewUtils.java对 maxWidth 等属性的读写采用反射并吞掉异常写自定义属性处理时同样要防御View 上根本没有这个方法的情况掌握 IConversion 扩展后AndroidScreenAdaptation 就从一个开箱即用的适配库变成了完全可控的适配框架——无论是 minWidth/maxWidth、圆角、还是你们团队私有的设计稿标注属性都能纳入统一的等比缩放体系真正做到预览什么样、真机就什么样。【免费下载链接】AndroidScreenAdaptationA light and easy-to-use Android development screen adaptation tool library(一个轻量好用的安卓开发屏幕适配工具库)项目地址: https://gitcode.com/gh_mirrors/an/AndroidScreenAdaptation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表