Android屏幕适配框架-(今日头条终极适配方案)

简介:

ca4b52c330aa5c93e5ae67bc0be11463f6ad5b07

在Android开发中,因为碎片化的问题,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈

我们之前做屏幕适配一般都会用到一下两种方式:

  1. 第一种就是宽高限定符适配,什么是宽高限定符适配呢

    ├── src/main
    │   ├── res
    │   ├── ├──values
    │   ├── ├──values-800x480
    │   ├── ├──values-860x540
    │   ├── ├──values-1024x600
    │   ├── ├──values-1024x768
    │   ├── ├──...
    │   ├── ├──values-2560x1440
  2. 就是这种,在资源文件下生成不同分辨率的资源文件,然后在布局文件中引用对应的 dimens,大家一定还有印象

  3. 第二种就是 鸿神 的AndroidAutoLayout

这两种方案都已经逐渐退出了历史的舞台,为什么想必大家都知道,不知道的建议看看拉丁吴老师的文章,现在最主流的两种屏幕适配方案,今日头条适配方案和smallestWidth限定符适配方案,下面介绍一个框架,采用的是今日头条适配方案传送门

框架使用效果

95ecaa6b7c4d0328560c2631f220f4444a342086

d90e87d82513d8bb13a6f3eb01afb1de599e642f

dc50901f1fac8d0e06417f58408d977e02edaefe

46baff49c4eb0efd11c19cc7ab6759582d0b47f9

f4e64552365eafb50e80c6cd55ba2448f78af3be

使用方式

第一步: 在module的build.gradle文件下做如下依赖

implementation 'me.jessyan:autosize:0.9.5'

第二步: 在 AndroidManifest 中填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp

<manifest>
<application>            
   <meta-data
       android:name="design_width_in_dp"
       android:value="360"/>

   <meta-data
       android:name="design_height_in_dp"
       android:value="640"/>
           
</application>           
</manifest>

经过上面两个步骤,框架就对你所有的页面进行适配了

当我们的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,我们可以对具体页面进行手动适配

Activity

  • 当某个 Activity 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数:

    public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {

       @Override
       public boolean isBaseOnWidth() {
           return false;
       }

       @Override
       public float getSizeInDp() {
           return 667;
       }
    }
  • 当某个 Activity 想放弃适配,请实现 CancelAdapt 接口:

  • public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {

    }

Fragment

  • 首先开启支持 Fragment 自定义参数的功能

    AutoSizeConfig.getInstance().setCustomFragment(true);
  • 当某个 Fragment 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数:

    public class CustomAdaptFragment extends Fragment implements CustomAdapt {

       @Override
       public boolean isBaseOnWidth() {
           return false;
       }

       @Override
       public float getSizeInDp() {
           return 667;
       }
    }
  • 当某个 Fragment 想放弃适配,请实现 CancelAdapt 接口:

    public class CancelAdaptFragment extends Fragment implements CancelAdapt {

    }

    可以在 pt、in、mm 这三个冷门单位中,选择一个作为副单位,副单位是用于规避修改 DisplayMetrics#density 所造成的对于其他使用 dp 布局的系统控件或三方库控件的不良影响,使用副单位后可直接填写设计图上的像素尺寸,不需要再将像素转化为 dp

    AutoSizeConfig.getInstance().getUnitsManager()
           .setSupportDP(false)
           .setSupportSP(false)
           .setSupportSubunits(Subunits.MM);

ProGuard

-keep class me.jessyan.autosize.** { *; }
-keep interface me.jessyan.autosize.** { *; }

项目地址:
https://github.com/sweetying520/AndroidAutoSizeDemo


原文发布时间为:2018-09-26

本文作者:妖孽那里逃

本文来自云栖社区合作伙伴“终端研发部”,了解相关信息可以关注“终端研发部


相关文章
|
5月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
694 63
|
7月前
|
机器学习/深度学习 Android开发 数据安全/隐私保护
手机脚本录制器, 脚本录制器安卓,识图识色屏幕点击器【autojs】
完整的UI界面,包含录制控制按钮和状态显示 屏幕点击动作录制功能,记录点击坐标和时间间隔
|
11月前
|
数据采集 JSON 网络安全
移动端数据抓取:Android App的TLS流量解密方案
本文介绍了一种通过TLS流量解密技术抓取知乎App热榜数据的方法。利用Charles Proxy解密HTTPS流量,分析App与服务器通信内容;结合Python Requests库模拟请求,配置特定请求头以绕过反爬机制。同时使用代理IP隐藏真实IP地址,确保抓取稳定。最终成功提取热榜标题、内容简介、链接等信息,为分析热点话题和用户趋势提供数据支持。此方法也可应用于其他Android App的数据采集,但需注意选择可靠的代理服务。
460 11
移动端数据抓取:Android App的TLS流量解密方案
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
399 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
算法 JavaScript Android开发
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
856 1
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
1253 9
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
819 8
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
442 1

热门文章

最新文章