屏幕适配相关介绍:
在学习绍文大神写的Android开发高手课时,在拓展看到了一些关于Android屏幕适配写的很好的文章,收益匪浅,故整理收集下来。
- 今日头条适配方案:https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247484502&idx=2&sn=a60ea223de4171dd2022bc2c71e09351&scene=21
- 高人对今日头条讲解:https://mp.weixin.qq.com/s/oSBUA7QKMWZURm1AHMyubA
- smallestWidth 限定符适配方案:https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650826381&idx=1&sn=5b71b7f1654b04a55fca25b0e90a4433&chksm=80b7b213b7c03b0598f6014bfa2f7de12e1f32ca9f7b7fc49a2cf0f96440e4a7897d45c788fb&scene=21#wechat_redirect
牛人根据今日头条写的开源框架:https://github.com/JessYanCoding/AndroidAutoSize
android屏幕的基础知识:
假设一个设备的屏幕分辨率是1080*1920,5寸屏,我们设定:
- 屏幕宽:w=1080
- 屏幕长:h=1920
- 屏幕尺寸:size=5
设备dpi=
d
p
i
=
w
2
+
h
2
s
i
z
e
dpi=\frac{\sqrt{w^2+ h^2}}{size}
dpi=sizew2+h2
160是Android官方规定的一个基准dpi,但dpi=160时1px=1dp。设备density=
d
e
n
s
i
t
y
=
d
p
i
160
density=\frac{dpi}{160}
density=160dpi
dp换算成px=
p
x
=
d
p
×
d
e
n
s
i
t
y
px=dp\times density
px=dp×density
android图片加载的缩放规则:
Android开发中用到的图片资源一般根据适配的屏幕密度(dpi)放入对应的drawable或mipmap文件夹,先来看下屏幕密度与文件夹命名的对应关系
dpi | 文件夹命名 |
---|---|
120 | ldpi |
160 | mdpi |
240 | hdpi |
320 | xhdpi |
480 | xxhdpi |
640 | xxxhdpi |
如图
上面什么意思呢?假如UI设计稿是以320dpi设计的一张图片宽=50px,图片资源放在mipmap-xhdpi,那么对于dpi=320的设备的显示效果就和设计稿一样。
如果要适配dpi=480的设备,那么放在mipmap-xxhdpi文件夹对应的图片宽=480/320*50px
如果app只适配了一套资源即只在mipmap-xhdpi文件夹中有图片,然后运行在一个dpi=480的设备,那么对应的图片就会放大480/320=1.5倍显示;如果运行在一个dpi=160的设备,那么对应的图片就会缩小320/160=2倍显示。