dp与px转换关系

本文详细介绍了Android中屏幕尺寸的概念,包括dp和px的转换公式,并提供了相关代码示例。针对不同密度(ldpi, mdpi, hdpi, xhdpi, xxhdpi)的屏幕,阐述了像素密度与dp单位之间的换算比例。同时,给出了获取屏幕参数的方法,如高度、宽度、dpi等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果想了解完整的屏幕尺寸问题,可以阅读如下文章Android屏幕尺寸详解

现在主要说的是dp和px的转换。

dp = (pixels * 160) / screen density

在Android中,规定以160dpi(即屏幕分辨率为320×480)为基准:1dp=1px

密度类型代表的分辨率(px)屏幕密度(dpi)换算(px/dp)比例
低密度(ldpi)240×3201201dp=0.75px3
中密度(mdpi)320×4801601dp=1px4
高密度(hdpi)480×8002401dp=1.5px6
超高密度(xhdpi)720×12803201dp=2px8
超超高密度(xxhdpi)1080×19204801dp=3px12

屏幕密度可以如下获取:

//float density  = dm.density;		// 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
//int densityDPI = dm.densityDpi;		// 像素密度(每寸像素:120/160/240/320)
//屏幕密度:density=1.5
//像素密度:densityDPI=240

getResources().getDisplayMetrics().densityDpi //就是像素密度。

[ro.sf.lcd_density]: [240]
public static float pxToDp(float px) {
	dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
	float densityDpi = dm.densityDpi;
	return px / (densityDpi / 160f);
}
 
public static int dpToPx(float dp) {
	dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
	float density = dm.density;
	return Math.round(dp * density);
}

获取屏幕状态的代码:

private String getScreenParams() {
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int heightPixels = dm.heightPixels;//高的像素
        int widthPixels = dm.widthPixels;//宽的像素
        int densityDpi = dm.densityDpi;//dpi
        float xdpi = dm.xdpi;//xdpi
        float ydpi = dm.ydpi;//ydpi
        float density = dm.density;//density=dpi/160,密度比
        float scaledDensity = dm.scaledDensity;//scaledDensity=dpi/160 字体缩放密度比
        float heightDP = heightPixels / density;//高度的dp
        float widthDP = widthPixels / density;//宽度的dp
        String str = "heightPixels: " + heightPixels + "px";
        str += "\nwidthPixels: " + widthPixels + "px";
        str += "\ndensityDpi: " + densityDpi + "dpi";
        str += "\nxdpi: " + xdpi + "dpi";
        str += "\nydpi: " + ydpi + "dpi";
        str += "\ndensity: " + density;
        str += "\nscaledDensity: " + scaledDensity;
        str += "\nheightDP: " + heightDP + "dp";
        str += "\nwidthDP: " + widthDP + "dp";

        return str;
    }

//打印信息
	heightPixels: 2235px
    widthPixels: 1080px
    densityDpi: 480dpi
    xdpi: 391.885dpi
    ydpi: 412.75dpi
    density: 3.0
    scaledDensity: 3.0
    heightDP: 745.0dp
    widthDP: 360.0dp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪舞飞影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值