屏幕适配

  • 序言
  • 相关重要概念
  • 硬件
  • 屏幕尺寸
  • 像素密度ppi
  • 分辨率
  • 软件
  • 密度
  • 像素密度dpi
  • 密度限定符
  • 密度无关像素
  • 比例无关像素
  • 屏幕适配的原因
  • 解决方案
  • 今日头条适配方案
  • 宽高限定符适配方案
  • smallestWidth 限定符适配原理
  • 最后总结


序言

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

相关重要概念

硬件

屏幕尺寸

屏幕尺寸指屏幕的对角线的长度,单位是英寸,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个像素,即:

android 屏幕适配工具 安卓应用屏幕适配_android

像素密度dpi

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

密度限定符

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

密度无关像素

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

比例无关像素

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

屏幕适配的原因

android 屏幕适配工具 安卓应用屏幕适配_android studio_02


解决方案

今日头条适配方案

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

总结:

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

宽高限定符适配方案

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

• res
 ├── values
 ├── values-480x320
 ├── …
 ├── values-1920x1080
 ├── values-2560x1440
  • 然后根据一个基准分辨率,例如基准分辨率为 1280x720,将宽度分成 720 份,取值为 1px ~ 720px,将高度分成 1280 份,取值为 1px ~ 1280px,生成各种分辨率对应的 dimens.xml 文件。
  • 使用命令:
    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 也需要增加一份尺寸

最后总结

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