Android屏幕:dip、dpi、density、px

QuibblerQuibbler 2020-02-25 约 6 分钟 1926 次阅读

Android屏幕:dip、dpi、density、px

1、Px (Pixel像素)

也称为图像元素,是作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化(屏幕越大,像素越低,单个像素越大,反之亦然)。所以在使用像素作为设计单位时,在不同的设备上可能会有缩放或拉伸的情况。

在Activity、Service或者View中可以获取到屏幕像素Px,Android都提供了getResources()方法虽然实现各不相同。

DisplayMetrics dm = getResources().getDisplayMetrics();
    //获取屏幕宽度的像素数量
    int screenWidth = dm.widthPixels;
    //获取屏幕高度的像素数量
    int screenHeight = dm.heightPixels;

或者:

WindowManager wm = (WindowManager) (getSystemService(Context.WINDOW_SERVICE));
    DisplayMetrics dm = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    
    int mScreenHeight = dm.heightPixels;
    int mScreenWidth = dm.widthPixels;

还可以通过传入Context的方式,获取到屏幕像素:

private void getPx(Context context) {
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int screenWidth = dm.widthPixels;
        int screenHeight = dm.heightPixels;
    }

X、Y 轴方向每英寸的像素:

DisplayMetrics dm = new DisplayMetrics();
    float xdpi = dm.xdpi;
    float ydpi = dm.ydpi;

2、Resolution(分辨率)

是指屏幕的垂直和水平方向的像素数量,如果分辨率是 2267*1080 ,那就是垂直方向有 2267个像素,水平方向有 1080 个像素。

3、Dpi(像素密度)预设

是指屏幕上每英寸(1英寸 = 2.54 厘米)距离中有多少个像素点。如果屏幕为 320*240,屏幕长 2 英寸宽 1.5 英寸,Dpi = 320 / 2 = 240 / 1.5 = 160。查看《dp像素对照表》

获取手机屏幕densityDpi

DisplayMetrics dm = new DisplayMetrics();
    float density = dm.densityDpi;

4、Density(密度)比例

这个是指屏幕上每平方英寸(2.54 ^ 2 平方厘米)中含有的像素点数量。

获取手机Density,获取当前设备的基准比例:

DisplayMetrics dm = getResources().getDisplayMetrics();
    //获取当前设备的基准比例
    float density = dm.density;

或者scaledDensity,获取系统dpi,随着 build.prop 文件中的代码而改变:

DisplayMetrics dm = getResources().getDisplayMetrics();
    //获取系统dpi,随着 build.prop 文件中的代码而改变。
    float scaledDensity= dm.scaledDensity;

5、Dip / dp (设备独立像素)

也可以叫做dp,长度单位,同一个单位在不同的设备上有不同的显示效果,具体效果根据设备的密度有关,详细的公式请看下面 。

        1. dpi(每英寸像素数)是有预设值的!120-160-240-320-480。对应不同的分辨率。

        2. 基准比例 = dpi(每英寸像素数) / 160

        3. px = dp x 基准比例

参考《Android屏幕单位转换dp、px、sp》

例IQOO:

      Pix:  width = 1080px height = 2267px

              density = 3.0

      Dip: width = 360.0dp height = 755.6667pd

https://blog.csdn.net/z_x_Qiang/article/details/73647239

相关推荐

评论 (1)

评论功能已关闭,仅展示历史评论
Quibbler
Quibbler

        DisplayMetrics里面的一些属性:

// 屏幕的逻辑密度,是密度无关像素(dip)的缩放因子,160dpi是系统屏幕显示的基线,1dip = 1px,
//所以,在160dpi的屏幕上,density = 1, 而在一个120dpi屏幕上 density = 0.75。
float density = metrics.density; 
 
//  屏幕的绝对宽度(像素)
int screenWidth = metrics.widthPixels;
 
// 屏幕的绝对高度(像素) 
int screenHeight = metrics.heightPixels; 
 
 //  屏幕上字体显示的缩放因子,一般与density值相同,除非在程序运行中,用户根据喜好调整了显示字体的大小时,会有微小的增加。
float scaledDensity = metrics.scaledDensity;
 
// X轴方向上屏幕每英寸的物理像素数。
float xdpi = metrics.xdpi; 
 
// Y轴方向上屏幕每英寸的物理像素数。
float ydpi = metrics.ydpi; 
 
// 每英寸的像素点数,屏幕密度的另一种表示。densityDpi = density * 160.