屏幕适配
- 序言
- 相关重要概念
- 硬件
- 屏幕尺寸
- 像素密度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个像素,即:
像素密度dpi
每英寸上的像素个数【单位是dpi,1英寸=2.54厘米,即 dot per Inch 的缩写】
密度限定符
不同像素密度dpi分为不同类型。例如res文件下的mdpi文件夹、xmdpi文件夹
密度无关像素
与手机设备的像素密度无关的像素。例如:对Button宽高使用:12dp
比例无关像素
与dp类似,一般就是系统的字体大小改变而调整 例如字体大小使用:12sp
屏幕适配的原因
解决方案
今日头条适配方案
- 1、以宽或高维度来进行适配【基本都以宽】;
- 2、修改DisplayMetrics的scaledDensity和density的比获得现在的scaledDensity;
- 3、监听系统设置中字体大小修改;
总结:
- 【侵入性极低,效果稳定】
宽高限定符适配方案
这种方案小编在最初学屏幕适配使用最普遍,
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"
总结:
- 【增大APK包体积 】
- 【必须精准命中才能适配】
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>
总结:
- 【增大APK包体积 】
- 【不能自动支持横竖屏切换时的适配】
- 【sp 也需要增加一份尺寸】
最后总结
本篇只是记录适配的技能使用方法。最好结合项目实战分析。