Android 屏幕适配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 屏幕适配相关的知识,希望对你有一定的参考价值。

参考技术A 1: dp: android 尺寸的基本单位。 在不同的分辨率的手机里面,1dp对应着不同数量的px, 这样就实现了dp定义一个控件大小的时候,在不同分辨率手机里表现出相应大小的像素值。
2: 屏幕分辨率: 1080下160, 表示宽度有1080个像素点而高度有2160个像素点。常见的分辨率有320x480, 480x800, 720x1280, 1080x1920等。
3: 屏幕尺寸: 以寸为单位, Android设备对角线的长度
4: 像素密度: 每英寸的像素点
5: 屏幕尺寸, 分辨率,像素密度 三者之间的关系:
密度(dpi)= √(宽2 + 高2)/屏幕尺寸

6: px:像素,是屏幕上显示数据的最基本的点
7: dpi:屏幕像素密度,每英寸上的像素点数
8: sp:与dp类似,通常用于指定字体的大小,当用户修改手机显示的字体时,字体大小会随之改变。

1: dp适配方案: Android自带的原始的适配方案, 在不同的分辨率手机里面表现出相应大小的像素点。
缺点: Android的碎片化严重, 如果生产厂家没有根据屏幕尺寸、分辨率和像素密度的关系来规则定义, 或者出一些乱七八糟的屏幕大小,这样的适配方案就不在适合了。

2: 宽高限定符:枚举所有的屏幕宽高像素值,根据等比缩放去适配。如果没有找到对应的屏幕, 则取默认的。 目前这种方案已经被弃用。

缺点:
1: 占用资源大,会增加APK的体积。
2: 容错机制大需要精准命中资源文件才能适配,比如1920x1080的手机就一定要找到1920x1080的限定符,否则就只能用统一的默认的dimens文件了。而使用默认的尺寸的话,UI就很可能变形。

3:AndroidAutoLayout适配方案(停止维护)

4: SW限定符适配方案:(smallestWidth最小宽度适配)
Android 会去识别屏幕可用高度或者宽度的最小尺寸的dp值。然后根据识别到的结果去对应的资源文件里面去找寻相应的结果。
如何生成:ScreenMatch插件

此方案跟宽高限定的适配方案相比,有很好的容错机制, 如果没有找到对应的适配宽度, 那么会在vlues文件里面去找跟他最接近的宽度。

5:今日头条适配方案:
1>: px 转 dp 的公式 dp = px / density.不管我们设定的单位是什么, 最终我们都会将这些单位长度转化为px的。density就是他们的转化比, 所以,动态改变这个转化比也是可以达到我们适配屏幕的目的的。
2>: 通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值(在清单文件中定义),这样就解决了所有的适配问题。
3>: Density = 当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) ;
4>:引入了AndroidAutoSize屏幕适配框架:
https://github.com/JessYanCoding/AndroidAutoSize

最后, 最重要的................
点赞 点赞 点赞, 不重要的事情也就说3遍......

Android 屏幕适配屏幕适配基础概念 ④ ( 屏幕适配限定符 | 手机/平板电脑设备屏幕适配 )

文章目录


参考文档 :





一、屏幕适配限定符



Android 系统加载应用资源时 , 会根据当前运行应用的设备的相关属性 , 如 : 屏幕尺寸 / 屏幕像素密度 / 宽高比 / 屏幕方向 等属性 , 加载不同的屏幕适配限定符目录下的资源 ;

如 : 横竖屏切换时 , res/layout-land 目录中 , 存放的是横屏布局 , res/layout-port 目录中 , 存放的是竖屏布局 ;


屏幕尺寸限定符 :

  • small : 小屏幕 ;
  • normal : 标准屏幕 ;
  • large : 大屏幕 ;
  • xlarge : 超大屏幕 ;

屏幕密度限定符 :

  • ldpi : 低屏幕像素密度 , 0 < d p i ≤ 120 \\rm 0 < dpi \\leq 120 0<dpi120 ;
  • mdpi : 中屏幕像素密度 , 120 < d p i ≤ 160 \\rm 120 < dpi \\leq 160 120<dpi160 ;
  • hdpi : 高屏幕像素密度 , 160 < d p i ≤ 240 \\rm 160 < dpi \\leq 240 160<dpi240 ;
  • xhdpi : 超高屏幕像素密度 , 240 < d p i ≤ 320 \\rm 240 < dpi \\leq 320 240<dpi320 ;
  • xxhdpi : 超超高屏幕像素密度 , 320 < d p i ≤ 480 \\rm 320 < dpi \\leq 480 320<dpi480 ;
  • xxxhdpi : 超超超高屏幕像素密度 , 480 < d p i ≤ 640 \\rm 480 < dpi \\leq 640 480<dpi640 ;

屏幕方向限定符 : 一般是用于横竖屏切换时进行适配 ;

  • land : 横线屏幕 ;
  • port : 纵向屏幕 ;

屏幕宽高比限定符 : 标准屏幕宽高比为 16 : 9 16:9 16:9 ;

  • long : 比标准屏幕要长的屏幕 , 20 : 9 20:9 20:9 , 21 : 9 21:9 21:9 ;
  • notlong : 标准屏幕 ;




二、手机/平板电脑设备屏幕适配



平板电脑市场占有率

Android 平板市场占有率如下 , 大概还是占了 40% 左右 , 因此平板适配还是很重要的 ;



密度无关像素计算

一般情况下 , 平板电脑的布局或图片资源 , 放在 res/layout-swxxdp 目录下 , 其中的 xx 是横向的 密度无关像素 ( DIP , Desity Independent Pixels ) 值 , 单位是 dp / dip ;

【Android 屏幕适配】屏幕适配基础概念 ① ( Android 与 iOS 屏幕宽高比种类 | 屏幕像素密度 DPI ) 博客中 , 计算了 6.5 6.5 6.5 寸屏幕 , 1920 × 1080 1920 \\times 1080 1920×1080 像素的屏幕的 屏幕像素密度 ( Dots Per Inch , 每英寸的像素点个数 ) , 值为 500 , 也就是每英寸有 500 500 500 个像素点 ;

将其转为 dp 单位 , 根据公式 :

p x = d p × d p i 160 \\rm px = dp \\times \\cfracdpi160 px=dp×160dpi

d p = p x × 160 d p i \\rm dp = px \\times \\cfrac160dpi dp=px×dpi160
= 1080 × 160 500 = 345.6 \\rm = 1080 \\times \\cfrac160500 = 345.6 =1080×500160=345.6

该设备的横向 密度无关像素 ( DIP , Desity Independent Pixels ) 值为 345.6 345.6 345.6 ;


手机设备限定符

在 布局 或 图片 目录名称中 , 加上 sw360dp 限定符 , 几乎兼容所有的手机设备 ; 当前市面上的手机 , 屏幕宽度 很少有超过 360 360 360 dp 的 ;

只要横向 密度无关像素 ≤ 360 d p \\rm \\leq 360 dp 360dp , 就可以使用 sw360dp 限定符下的资源 , 如 res/layout-sw360dp 目录下的资源 ;


平板设备限定符

在 布局 或 图片 目录名称中 ,

  • 加上 sw480dp 限定符 , 对应 7 7 7 寸平板电脑 ;
  • 加上 sw560dp 限定符 , 对应 8 8 8 寸平板电脑 ;
  • 加上 sw720dp 限定符 , 对应 10 10 10 寸平板电脑 ;

以上是关于Android 屏幕适配的主要内容,如果未能解决你的问题,请参考以下文章

Android 屏幕适配屏幕适配基础概念 ① ( Android 与 iOS 屏幕宽高比种类 | 屏幕像素密度 DPI )

Android 屏幕适配

Android-屏幕适配全攻略(绝对详细)(一)

Android 屏幕适配总结

Android 屏幕适配总结

Android屏幕适配全攻略(最权威的Google官方适配指导)