Android 屏幕适配那点事

作者: EitanLiu | 来源:发表于2017-07-12 07:38 被阅读313次

曾经看过写屏幕适配的文章,内容介绍了很多最后切没给出个易懂的解决方法,朋友问起就整理了下。

术语

  • 像素点 px,不解释了。
  • 分辨率,屏幕上像素px的总数。
  • 屏幕尺寸 in,以英寸为单位屏幕对角测量的实际物理尺寸。
  • 屏幕密度 dpi,dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数,Android为了解决屏幕尺寸碎片化问题,系统内置屏幕密度值和实际公式计算值会有不同。
  • 密度无关像素 dp(dip),dp = px/(dpi/160)
  • 缩放无关像素 sp,除了dp单位的效果外,会随系统设置字体大小而变化。

图片资源适配

屏幕密度最直接的影响是drawable下图片的缩放,dpi越高显示的图片显示效果越小占用内存越小。

限定符 密度(dpi) 尺寸比(dpi/160) px/dp(icon) 代表分辨率
ldpi ~120dpi 0.75 36/48 240x320
mdpi ~160dpi 1 48/48 320x480
hdpi ~240dpi 1.5 72/48 480x800
xhdpi ~320dpi 2 96/48 720x1280
xxhdpi ~480dpi 3 144/48 1080x1920
xxxhdpi ~640dpi 4 192/48 icon
tvdpi ~213dpi 1.33 64/48 tv
nodpi ~ ~ ~ normal

如上表所示mdpi下1px=1dp、hdpi下1.5px=1dp、xhdpi下2px=1dp以此类推,720x1280(所谓的2x图)的设计切图放在xhdpi,1080x1920(3x图)的设计切图放在xxhdpi(明白了可以去向iOS炫耀我们不仅有2x和3x图,还有0.75x、1x、1.5x和4x就是这么任性)。在日常使用中通常使用一份720x1280的尺寸,如果设计用的是iOS的尺寸不愿意切Android尺寸只能将就的放了。

尺寸适配

一般9:16的屏幕尺寸的dp值为360x640,通常屏幕适配以这个尺寸进行换算。720x1280的设计尺寸除以2为布局的dp值(1080x1920则除以3)。针对不是常见值的屏幕尺寸(不适配特殊机型和平板的不用看了),Android根据版本不同有不同适配方式。

  • 1). Android 3.2+ 很好理解N为任何整数单位dp
限定符 说明
sw<N>dp 宽高中最小值>=N
w<N>dp 宽最小值>=N
h<N>dp 高最小值>=N
  • 2). Android 3.2 以下尺寸组方案区分,已被弃用
限定符 最小尺寸(dp) 说明
small 320x426 小尺寸屏幕
normal 320x470 正常尺寸屏幕(基线尺寸)
large 480x640 大尺寸屏幕
xlarge 720x960 超大尺寸屏幕

其它限定符,由于Android 3.2后新的适配方式横竖布局限定符可以用新方案代替,纵横比在尺寸组弃用后已没多大意义(本来也没多大用处),所以这两种限定符很少被使用了。

限定符 作用
land 横屏布局
port 竖屏布局
long 纵横比大于正常尺寸
nolong 纵横比类似正常尺寸

限定符的使用示例(-隔开就是啦)

layout-xlarge #超大尺寸
layout-xlarge-land #横屏超大尺寸
layout-sw600dp #大于600dp布局
values-sw600dp #大于600dp引用值

关于屏幕适配自己曾经已AndroidAutoLayout的想法写过一个基于百分比为基础上的方案Android 适配无难事 UniversalLayout,但读完Google的适配方案觉得这些方法只是方便了开发,但违背了Google对多屏幕多布局的设计思想,可以作为学习参考尽量不要用于开发(后悔中-_-||)。

参考

Google 贴心的给出了中文版的内容,看不懂英文已经不是问题了不过你要先翻墙。
Supporting Multiple Screens | Android Developers
Tablet app quality | Android Developers
Designing for Multiple Screens
详解Android开发中dp dip sp px dpi ppi 区别和转换

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请保留作者及原文链接

相关文章

网友评论

  • bfdb40eabfab:适配就是针对占有率最高分辨率出效果图(目前应该是360dp),适当考虑其他分辨率显示,如内容过多换行,图片等比缩放。特殊布局需求单独处理,这种情况一般很少用到,一般页面一套布局就搞定。
    EitanLiu:不小心写错了已修改

本文标题:Android 屏幕适配那点事

本文链接:https://www.haomeiwen.com/subject/hfvphxtx.html