android布局适合所有屏幕(Android主流机型屏幕适配方案)

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个极低成本的 Android 屏幕适配方案——AndroidAutoSize。

android布局适合所有屏幕(Android主流机型屏幕适配方案)(1)

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

  • 主单位: 使用 dp、sp 为单位进行布局,侵入性最低,会影响其他三方库页面、三方库控件以及系统控件的布局效果,但 AndroidAutoSize 也是通过这个特性,使用 ExternalAdaptManager 实现了在不修改三方库源码的情况下适配三方库的功能
  • 副单位: 使用 pt、in、mm 为单位进行布局,侵入性高,对老项目的支持比较好,不会影响其他三方库页面、三方库控件以及系统控件的布局效果,可以彻底的屏蔽修改 density 所造成的所有未知和已知问题,都是这样 AndroidAutoSize 也就无法对三方库进行适配
适配效果

Pixel 2 XL | 1440 x 2880 | 560dpi:

android布局适合所有屏幕(Android主流机型屏幕适配方案)(2)

Pixel XL | 1440 x 2560 | 560dpi:

android布局适合所有屏幕(Android主流机型屏幕适配方案)(3)

Nexus 5X | 1080 x 1920 | 420dpi:

android布局适合所有屏幕(Android主流机型屏幕适配方案)(4)

Nexus 4 | 768 x 1280 | 320dpi:

android布局适合所有屏幕(Android主流机型屏幕适配方案)(5)

Nexus S | 480 x 800 | 240dpi:

android布局适合所有屏幕(Android主流机型屏幕适配方案)(6)

如何使用

依赖:

dependencies { implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1' }

基本使用:

在 AndroidManifest 填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp。无需其他过多配置 ,AndroidAutoSize 即可自动运行。

<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>

注意:

在使用主单位时,design_width_in_dp 和 design_height_in_dp 的单位必须是 dp,如果设计师给你的设计图,只标注了 px 尺寸 (现在已经有很多 UI 工具可以自动标注 dp 尺寸了),那请自行根据公式 dp = px / (DPI / 160) 将 px 尺寸转换为 dp 尺寸

进阶使用:

  • 当某个 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 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数

// 首先开启支持 Fragment 自定义参数的功能 AutoSizeConfig.getInstance().setCustomFragment(true);

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 { }

—END—

开源协议:Apache2.0

开源地址:https://github.com/JessYanCoding/AndroidAutoSize

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页