Android屏幕:dip、dpi、density、px

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

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

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w

评论 (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.