android设备多种多样,要让你的app能够适配所有的屏幕是一件很痛苦的事情,在做适配之前我们首先需要了解android中dimension的定义
android中dimension是如何定义的?
android中支持的dimension单位有px,in,mm,pt,dp,sp,常用到有px,dp,sp
1. px
Pixels: 对应于屏幕上的实际像素。但是并不建议使用这个单位,因为每个设备的每英寸对应的像素数量都有可能不同,并且每个设备屏幕上可用的总像素也是不同的。
2. dp
Density-independent Pixels : dp是一种基于屏幕物理密度的单位,这个单位是基于160dpi(每英寸像素点数)的屏幕,即在160dpi的屏幕上1dp大约等于1px。在不同dpi上运行时,每1dp上绘制或者需要pixels是不一样的,在高于160dpi的屏幕上,等比放大,相反,在小于160dpi的屏幕上,等比缩小。用dp作为单位将会是一个最简单的方式来适配不同的屏幕密度。也就是说dp提供了会不同尺寸的UI元素统一的可能.
3. sp
Scale-independent Pixels : sp单位与dp一致,不同点的是,sp单位是支持scale的,当用户在设置中调整标准字体大小时,每一sp对应的px将会改变.
android中屏幕尺寸是如何定义的?
Screen Size
即实际物理的尺寸,按照大小区分为4类,按照width即短边为准
xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
Screen density
即屏幕密度,定义每dp对应的px数量,已160dpi为标准,1dp = 1px
ldpi (low) ~120dpimdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
官网截图
各种单位换算(https://www.pixplicity.com/dp-px-converter)
px = (dpi / 160) * dp
假设用户不调整字体大小的情况下
mdpi 对应的是160dpi,1dp = 1px = 1sp