Android屏幕相关知识

Android屏幕相关知识


屏幕参数


  • 屏幕大小
    对角线的长度,比如我们常见的4.7寸/5.5寸。

  • 分辨率
    手机屏幕像素点的个数,比如720*1080,就是宽有720个像素点,高有1080个像素点。

  • PPI/DPI
    每英寸像素,我们计算的话就是对角线上的像素点数除以屏幕大小得到的。


手机屏幕密度


    在android系统中,系统定义个几个标准的DPI值,用来作为固定的DPI。我们在开发中美工会做不同屏幕密度的图给开发人员,具体对照关系如下:
密度ldpimdpihdpixhdpixxhdpi
密度值120160240320480
分辨率240*320320*480480*800720*12801080*1920

独立像素密度 dp


由于每个厂商的android手机的具有的不同的大小尺寸和不同像素密度的屏幕,屏幕尺寸碎片化严重。导致同样像素大小的长度,在不同的屏幕上显示长度不同。相同长度的屏幕,高密度的屏幕包含更多的像素点。

android系统是哟个mdpi密度值为160的屏幕作为标准,在这个屏幕上1dp=1px。其他屏幕通过比例进行换算,如下:

mdpi1dp=1px
hdpi1dp=1.5px
xhdpi1dp=2px
xxhdpi1dp=3px

由上表可以看出各个分辨率换算比例ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12。


单位换算


而我们在实际开发中考虑到屏幕适配,我们在布局文件中尽量使用与屏幕的物理参数无关的单位如dp和sp,而不用px;在程序中,也可以很方便的对这些单位进行转换,可将下面代码作为工具类保存在项目中。

public class DensityUtil {
    /**
     * 将dip或dp值转换为px
     * 
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 将px值转换为dip或dp
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将px值转换为sp
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 将sp值转换为px
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    /**
     * 获得屏幕物理像素width
     * 
     * @param context
     * @return
     */
    public static int getScreenWidth(Activity context) {
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels;
    }

    /**
     * 获得屏幕物理像素height
     * 
     * @param context
     * @return
     */
    public static int getScreenHeight(Activity context) {
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return dm.heightPixels;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值