Android显示长度单位相关:px、ppi、dp、dpi、sp、density

#.概念解释:
1.px:屏幕显示的基本单位是像素,px代表一个像素长度。
2.ppi:即“屏幕密度”,沿屏幕对角线方向上,一英寸长度上所包含的像素数,即折算成的px长度。(注:一英寸inch 约等于2.54cm)
3.dpi:与ppi定义类似,但指的是对角线方向一英寸长度包含的印刷点数量,一般情况下,一个像素对应一个印刷点,所以一般dpi=ppi。
4.dp:全称:Density-independent pixel (dp)独立像素密度。
    不同屏幕的尺寸大小、分辨率、ppi等不同,为了便于UI的设计和显示适配,提出了dp这个概念。
    它事实上类似于一个物理长度单位,与像素密度无关,它等于对角线方向上一英寸的1/160。也就是说,ppi为160的屏幕上,1dp=1px。
    也就是说 1*(inch) = 160*(dp) = ppi*(px),所以dp与px的换算单位为:LenthDp = ppi/160 * LenthPx。
5.density:根据上面第4点,引入一个新的概念,密度比值,即当前屏幕与160ppi的屏幕的密度比值。
                    density = ppi/160。即LenthDp = density * LenthPx。
6.sp:与dp非常相似,与ppi等无关,类似于物理长度单位。
          但与dp的差别是,主要用于文字的尺寸设置,用于文字尺寸单位时,系统有相应优化和适配,它可以根据用户的字体大小偏好来缩放,会随着系统的字体大小改变
#.屏幕相关显示参数的获取
Android中DisplayMetrics类封装了一些列与显示相关的参数,可通过获取屏幕对应的DisplayMetrics对象来获取屏幕相关显示参数,其中一些关键示例变量:
widthPixels:屏幕宽度,单位px
heightPixels:屏幕高度,单位px
densityDpi:即ppi,屏幕密度,对角线上每英寸的像素数
density:密度比值,即 ppi/160。
##.可通过以下代码获取封装屏幕显示参数的DisplayMetrics对象:
    DisplayMetrics dm = Resources.getSystem().getDisplayMetrics();
    或者
    DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
若当前位于Activity中,则还可通过以下方法来获取:
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
##.dp长度转换为px长度的示例代码
    public static float dpToPx(int dpLenth){
        DisplayMetrics dm = Resources.getSystem().getDisplayMetrics();
        return dpLenth * dm.density;
    }

猜你喜欢

转载自blog.csdn.net/u013914309/article/details/124594963