众所周知,Android机型众多,屏幕尺寸、分辨率各有不同。对于Android开发人员来说,如何提高APP中图片对各种机型的适配是基本技能之一。借着项目中遇到的图片适配问题,在总结项目时,就想着顺带把这部分好好捋一捋,作为一个记录,也为不是很清楚这部分的人提供一个参考。
先说mipmap
采用Android Studio开发Android APP,在项目的res目录下,会多出几个以mipmap开头的文件夹。
根据Android官方的描述,mipmap仅仅用于存放APP启动图标,可由Image Asset Studio生成。Image Asset Studio会生成mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi五种尺寸的图标。图标最好不要随意定义尺寸,分辨率过低会模糊,过高徒增APK包大小。各种密度下的图标建议尺寸为
密度 | 建议尺寸 |
---|---|
mdpi | 48*48 |
hdpi | 72*72 |
xhdpi | 96*96 |
xxhdpi | 144*144 |
xxxhdpi | 192*192 |
如果要上传到Google Play,还需要一张512*512的图片用于Google Play Store。
再说drawable图片适配
Android系统可以在具有不同屏幕尺寸和密度的设备上运行,并将每个应用的用户界面调整为适应其显示的屏幕,会进行缩放和大小调整。为了最大程序优化更多设备上的用户体验,开发者需要针对不同的屏幕尺寸和密度优化应用。对于Android智能手机来说,屏幕大小、分辨率、密度均不尽相同,那么图片适配就成了Android中优化应用必不可少的环节之一。
相关概念
dpi
每英寸点数,全称dots per inch。用来表示屏幕密度,即屏幕物理区域中的像素量。高密度屏幕比低密度屏幕在给定物理区域的像素要多。dp
即dip,全称device independent pixel。设备独立像素,是一种虚拟像素单位,用于以密度无关方式表示布局维度或位置,以确保在不同密度的屏幕上正常显示UI。在160dpi的设备上,1dp=1px。density
设备的逻辑密度,是dip的缩放因子。以160dpi的屏幕为基线,density=dpi/160。getResources().getDisplayMetrics().density
sp
缩放独立像素,全称scale independent pixel。类似于dp,一般用于设置