在Android开发过程中,屏幕适配往往是开发人员比较忽视的一个知识点。往往这些被忽视的东西在遇到问题的时候会耗费你比较多的时间。所以对于初级程序员来说理解掌握适配的一些基本知识是必须的。(大牛请移步)
一、理解dp,px,dpi,sp的概念
px:
px其实就是像素单位,比如我们通常说的手机分辨列表800*400都是px的单位。
dpi:
一英寸所占的像素点的个数,有一些厂家会把160dpi改成1.2
Google规定的见下表:
| 一英寸有多少个点儿? | 我们用来density(密度)来分辨 |
ldpi | 120dpi | 0.75 |
mdpi | 160dpi | 1 |
hdpi | 240dpi | 1.5 |
xhdpi | 320dpi | 2 |
dpi的计算:
比如:计算WVGA(800*480)分辨率,3.7英寸
DPI=
=933/3.7=252
dp/dip:
device independent pixels(设备独立像素) ,Android开发中通用的与px无关的单位。
sp:
放大的像素,与dp,px没有直接的关系,用于字体。
二、px与dp的关系
dp=px*160/dpi 屏幕1英寸的点数=160dpi(也就是密度为1)的时候,1dp=1px。
实际开发过程中,我们获取到height、width都是px单位的,往往就需要我们转化成dp去动态设置,
那怎么转化呢?
DisplayMetrics 对象会分装手机的宽、高、密度、缩放密度等属性,怎么获取DisplayMetrics 呢?
context.getResources().getDisplayMetrics();
px转dp
dp = pxValue / density+ 0.5f
dp转px
px = dipValue * density+ 0.5f
px转sp
sp=pxValue / scaledDensity+ 0.5f
sp转px
px=spValue *scaledDensity+ 0.5f
注:如果AndroidManifest配置文件中未配置 <uses-sdk / >那么DisplayMetrics 中的属性获取的值都是默认的值,而不是
手机正确的