安卓适配

安卓中px,dp,dpi的概念

  1. 屏幕尺寸:屏幕对角线的长度,一般以英寸为单位,1英寸=2.54厘米
  2. px:像素。屏幕上可视的点,不随设备改变,不同设备显示效果一样。
  3. 分辨率:手机屏幕上水平方向和垂直方向上的像素个数,一般用:垂直个数 * 水平个数 来表示。常见的分辨率1920 *1080,1080 * 720,2160 *1080等。
  4. dpi:像素密度。每英寸内的像素值。例如一个分辨率480 * 360的手机,屏幕水平长2英寸,高长3英寸,则水平方向上的dpi为160,垂直方向上的dpi为160。或者知道分辨率以及屏幕尺寸,可以用勾股定理近似计算。
    google将160dpi作为标准
  5. dp(或者dip):屏幕无关密度。是一个抽象意义上的像素,它和dpi有着直接的关系。其中px,dp,dpi之间的换算关系可以表示为以下公式:

px = dp*(dpi / 160)

也就是说:

当dpi = 160时,dp = 1,px = 1*(160 / 160) = 1,即:1dp = 1px。
当dpi = 320时,dp = 1,px = 1*(320 / 160) = 2,即:1dp = 2px。

可以把dp想象成屏幕上的一个固定大小的区域,该区域内部包含px,而内部px的个数是由dpi决定的。dpi越大,1dp内的px个数越多,当dpi = 160时,1dp内包含一个px,此时1dp和一个px大小相同。由此我们可以看出,安卓在屏幕适配是最好使用dp,不要使用px。如果使用px,现在假设有两部手机屏幕尺寸一样,分辨率不同,在小分辨率手机上像素点的大小比较大,在大分辨率的手机上像素点的大小比较小,这就导致使用相同px来设置,图形在小分辨率手机上显示偏大,在大分辨率手机上显示偏小,无法适配。因此我们在适配尺寸时用dp不要用px。相同的对于文字大小的设置google推荐我们用sp来代替px。

  1. density:密度。它和dpi的关系:

density = dpi / 160。

所以上面的px和dp的关系也可以用density来表示为:

px = dp*density

安卓中我们可以通过DisplayMetrics类来获取:

 DisplayMetrics displayMetrics =context.getResources().getDisplayMetrics();
        float density = displayMetrics.density;//密度
        int densityDpi = displayMetrics.densityDpi;//dpi
        int widthPixels = displayMetrics.widthPixels;//屏幕宽度
        int heightPixels = displayMetrics.heightPixels;//屏幕高度

下面是px和dp互相转换的代码:

 /** 
     * dp转px
     */  
    public static int dip2px(Context context, float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dpValue * scale + 0.5f);  //加0.5f表示四舍五入
    }  

    /** 
     * px转dp
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);   //加0.5f表示四舍五入
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值