Android学习屏幕适配技能包

序言

本篇只当做屏幕适配的技能使用方法笔记,旨意不在创作上。会记录一些基础的相关概念。

相关重要概念

硬件

屏幕尺寸

屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米,从国内几大手机厂商品牌来看,除了市场上留存的和之前已经销售的手机看,现如今常见的屏幕尺寸保持在:5.5寸、6.0寸、6.5寸、6.8寸等。

像素密度ppi

每英寸上的像素个数【单位是ppi,1英寸=2.54厘米,即 point per inch 的缩写】

分辨率

屏幕分辨率是指在横纵方向上的像素个数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1920 * 1080等。

软件

密度

单位密度无关像素对应的像素个数。一般规定如下:
规定160dpi为基准,即160dpi的屏幕上密度无关像素对应1个像素,即:

像素密度dpi

每英寸上的像素个数【单位是dpi,1英寸=2.54厘米,即 dot per Inch 的缩写】

密度限定符

不同像素密度dpi分为不同类型。例如res文件下的mdpi文件夹、xmdpi文件夹

密度无关像素

与手机设备的像素密度无关的像素。例如:对Button宽高使用:12dp

比例无关像素

与dp类似,一般就是系统的字体大小改变而调整 例如字体大小使用:12sp

屏幕适配的原因


图片引用自 jiashuai94

解决方案

今日头条适配方案

链接配上:字节跳动技术团队 著

  • 1、以宽或高维度来进行适配【基本都以宽】;
  • 2、修改DisplayMetricsscaledDensitydensity的比获得现在的scaledDensity;
  • 3、监听系统设置中字体大小修改;

总结:

  1. 侵入性极低,效果稳定

宽高限定符适配方案

这种方案小编在最初学屏幕适配使用最普遍,
1. 建不同分辨率的文件夹放入多套图

  • res
    ├── values
    ├── values-480x320
    ├── …
    ├── values-1920x1080
    ├── values-2560x1440
    在这里插入图片描述
  • 然后根据一个基准分辨率,例如基准分辨率为 1280x720,将宽度分成 720 份,取值为 1px ~ 720px,将高度分成 1280 份,取值为 1px ~ 1280px,生成各种分辨率对应的 dimens.xml 文件。
  • 这里提供 鸿洋大神github 自动生成工具 下载地址
  • 使用命令:
    java -jar 文件名.jar 基准宽 基准高 额外支持尺寸1的宽,额外支持尺寸1的高_额外支持尺寸2的宽,额外支持尺寸2的高:
  • 例如:设置的基准是800x1280,额外支持尺寸:735x1152 ;3200x4500;
    java -jar 文件名.jar 800 1280 735,1152_3200,4500

2. 将生成像素数列表(lay_x.xml和lay_y.xml)存放在res目录下对应的values文件(注意宽、高要对应)

  • 必须在默认values里面也创建对应默认lay_x.xml和lay_y.xml文件。如下图
  • 因为对于没有生成对应分辨率文件的手机,会使用默认values文件夹,如果默认values文件夹没有(即没有对应的分辨率、没有对应dimen)就会报错,从而无法进行屏幕适配。
    (注意对应单位改为dp,而不同于上面的px。因为不知道机型的分辨率,所以默认分辨率文件只好默认为x1=1dp以保证尽量兼容(又回到dp老方法了),这也是这个解决方案的一个弊端)

3. 根据UI设计师给出某一分辨率设计图上的尺寸,找到对应像素数的单位,然后设置给控件即可
例如:

  •   android:layout_width="@dimen/x120"
      android:layout_height="@dimen/y120"
    

总结:

  1. 增大APK包体积
  2. 必须精准命中才能适配

smallestWidth 限定符适配原理

1. 为每种需要适配的最小宽度提供一个文件夹

  • 在 Android Studio 中搜索安装 ScreenMatch 插件。如下图:
  • 插件安装好后,在项目的任意目录或文件上右键,选择 ScreenMatch 选项。如下图:
    在这里插入图片描述
    生成的结果
  • res
    ├──values
    ├──values-sw384dp
    ├──values-sw400dp
    ├──values-sw410dp
    ├──values-sw480dp
    ├──values-sw720dp

2. 选定一个基准的最小宽度

  • 例如:先选定480dp为最小宽度,将宽整份为480 份,得到以下尺寸
  •   <dimen name="x1">1dp</dimen>
      <dimen name="x2">2dp</dimen>
      <dimen name="dp_480">480dp</dimen>
    

3. 按比例计算其他最小宽度下的尺寸

  • 以480dp为最小宽度,在不同最小宽度的文件夹下按比例缩放尺寸,例如sw720dp:
  •   <dimen name="x1">1.5dp</dimen> 720/480
      <dimen name="x2">3.0dp</dimen>
      <dimen name="dp_480 ">720dp</dimen>
    

总结:

  1. 增大APK包体积
  2. 不能自动支持横竖屏切换时的适配
  3. sp 也需要增加一份尺寸

最后总结

本篇只是记录适配的技能使用方法。最好结合项目实战分析。

 
 
参考资料:
一种非常好用的Android屏幕适配
Android 屏幕适配:最全面的解决方案
Android | 老生常谈!屏幕适配原理 & 方案总结笔记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆流的剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值