dp px 像素密度 分辨率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dp px 像素密度 分辨率相关的知识,希望对你有一定的参考价值。


像素单位转换dp-px
直接转换:
        int dp= (int) (px / context.getResources().getDisplayMetrics().density + 0.5f);
        int px= (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);

封装为方法:

    /** 
    * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
    */
    public static int dp2px(Context context, float dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    /** 
    * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
    */
    public static int px2dp(Context context, float pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }


屏幕规格参数
   像素比例  每英寸像素数  分辨率
xxhdpi  3       480    1080*1920  1080P    144*144   重点关注
xhdpi    2       320    720*1280    720P      96*96      适配基准
hdpi     1.5     240    480*800      WVGA   72*72  
mdpi   1.0     160    320*480       HVGA    48*48      基准
ldpi     0.75    120    240*320      QVGA    36*36


字体的单位
1、TextView.setTextSize默认传入的单位是sp,TextView.getTextSize返回值是px,Paint.setTextSize传入的也是px

总结:代码中设置的值都是px,除了TextView.setTextSize


2、TextView有一个可以指定单位的设置字体大小的方法setTextSize(int unit, int size)
第一个参数可设置如下静态变量:
  • TypedValue.COMPLEX_UNIT_PX : Pixels
  • TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
  • TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
setTextSize(TypedValue.COMPLEX_UNIT_PX, getTextSize());//注意:setTextSize默认单位是SP,而getTextSize()默认单位是PX  


名词解释
  • Px(像素Pixel) 不同设备上显示时像素数不会变,比如指定控件的长度是100px,那不管分辨率是多少控件长度都是100px。也正是因为如此才产生了屏幕适配问题。
  • Screen Size(屏幕尺寸) 一般所说的手机屏幕大小如5.0英寸,都是指的对角线的长度,而不是手机面积。
  • Resolution(分辨率) 在屏幕上显示的物理像素总和。比如分辨率是720*1280,则指设备垂直方向有1280个像素点,水平方向有720个像素点。需要注意的是:尽管分辨率通常用宽x高表示,但分辨率并不意味着具体的屏幕长宽比,比如分辨率为720*1280的手机屏幕宽高比不一定是720:1280,但是为了显示效果和谐,两者一般都是一致的。
  • Density(密度) 指单位英寸中的像素数。DisplayMetrics类中属性density的值即为此值,可用于px与dip的互相转换
  • Dpi(像素密度dots per inch ) 指每英寸中的像素数。dp是一个与密度无关的像素,在不同的像素密度的设备上会自动适配,在逻辑尺寸上,与一个位于像素密度为 160DPI 的屏幕上的像素是一致的,在运行的时候,平台会以目标屏幕的密度作为基准,处理所有需要的DIP缩放操作。假定设备分辨率为320*240,屏幕长2英寸宽1.5英寸,dpi=320/2=240/1.5=160,此160dpi表示手机水平或垂直方向上每英寸距离有160个像素点。要把DIP像素转换为屏幕像素,可以用这样一个简单的公式: pixels = dips * (density / 160)。
  • Dip(设备独立像素Device-independent pixel) 同dp,不同设备有不同的显示效果,这个和设备硬件有关,不依赖像素。dip和具体像素值的对应公式是dip值 =设备密度/160* pixel值,可以看出在dpi为160dpi的设备上1px=1dip
  • Sp(放大像素ScaledPixels) 主要用于字体显示(best for textsize)。根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知 android 默认使用 sp 作为字号单位。






以上是关于dp px 像素密度 分辨率的主要内容,如果未能解决你的问题,请参考以下文章

Android中分辨率,DPI,DP与PX对应关系

Android 屏幕适配

android屏幕适配的全攻略

Android屏幕适配

Android屏幕适配

Android屏幕适配