Android开发中的各种单位的解释


  • Px (Pixel像素)

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

  • Resolution(分辨率)

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

  • Dpi(像素密度)

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

  • Density(密度)

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

  • Dip / dp (设备独立像素)

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

计算规则


我们以一个 4.95 英寸 1920 * 1080 的 nexus5 手机设备为例:

Dpi :

  1. 计算直角边像素数量: 1920^2+1080^2=2202^2(勾股定理)。
  2. 计算 DPI:2202 / 4.95 = 445。
  3. 得到这个设备的 DPI 为 445 (每英寸的距离中有 445 个像素)。

Density

上面得到每英寸中有 440 像素,那么 density 为每平方英寸中的像素数量,应该为: 445^2=198025。

Dip

  1. 先明白一个概念,所有显示到屏幕上的图像都是以 px 为单位。
  2. Dip 是我们开发中使用的长度单位,最后他也需要转换成 px。
  3. 计算这个设备上 1dip 等于多少 px:

    px = dip x dpi /160

    px = 1 x 445 / 160 = 2.78
  4. 通过上面的计算可以看出在此设备上 1dip = 2.78px,那么这是一个真实的故事吗? nonono,其中的关键值 dpi 并不是我们算出来的 445 ,请往下看。

Android 系统定义的 Dpi


上面计算的 445Dpi 是在 4.95 英寸下的 1920*1080 手机,那如果是 4.75 分辨率下的呢? 4.55 分辨率下的呢?。。。。可见是很麻烦的,同一个分辨率在不同的屏幕尺寸上 Dpi 也不相同。为了解决这个问题, Android 中内置了几个默认的 Dpi ,在特定的分辨率下自动调用,也可以手动在配置文件中修改。

  ldpi mdpi hdpi xhdpi xxhdpi
分辨率 240×320 320×480 480×800 720×1280 1080×1920
系统dpi 120 160 240 320 480
基准比例 0.75 1 1.5 2 3

这是内置的 Dpi ,啥意思? 在 1920*1080 分辨率的手机上 默认就使用 480 的 dpi ,不管的你的尺寸是多大都是这样,除非厂家手动修改了配置文件,这个我们后面再说。

我们亲自尝试一下:

这是一个 textview,高为 200dp 宽为 100dp 。按照我们之前的公式手动计算:

我们用下列代码获取到控件的实际像素看看是否相同:

输出的结果为:300/600

内部计算过程为:

其中的 160 是基准值不会变的, 100 和200 是我们设置的 dp ,那么这 480 是从何而来的?说好的 445 呢?

找到我们手机中的 /system/build.prop 文件,其中有一行是这样:

ro.sf.lcd_density=480

这就指定了这个机型使用的dpi是多少,还有一种情况是没有这一行(我在模拟器中发现过),那么应该是根据表格中的分辨率来自动设置。

我更改这行为:

ro.sf.lcd_density=320

再次运行上面的测试代码,输出结果为:200/400

内部计算过程为:

说到底,因为有dpi这个动态的系数,我们在使用dp的时候才能兼容不同分辨率的设备。

到这里,应该都明白了 dpi 的由来,以及系统 dpi 跟物理 dpi 并不一定相同。在系统中使用的全部都是系统 dpi,没有使用物理 dpi,也获取不到物理 dpi。物理 dpi 主要用于厂家对于手机的参数描述(也可以看做 ppi )!

然后。。表格中还有一个东西叫做基准比例,这个其实就是计算 dp -> px 中重要的系数,以 160 为基准,其他的除以 160 得到比例,我们这样看:

其中的480/160其实就是在求基准比例,这里得到3。如果在熟悉上表的情况下看到机型的分辨率,在设置dp的时候可以直接心算出相对应的px,心算过程如下:

分辨率:1080×1920 -> 系统 DPI:480 -> 基准比例:480 / 160 = 3 -> 对应px:100 x 3 = 300

分辨率:720×1280 -> 系统 DPI:320 -> 基准比例:320 / 160 = 2 -> 对应px:100 x 2 = 200

分辨率:480×800 -> 系统 DPI:240 -> 基准比例:240 / 160 = 1.5 -> 对应px:100 x 1.5 = 150

分辨率:320×480 -> 系统 DPI:160 -> 基准比例:160 / 160 = 1 -> 对应px:100 x 1 = 100

分辨率:240×320 -> 系统 DPI:120 -> 基准比例:120 / 160 = 0.75 -> 对应px:100 x 0.75 = 75

……………….

总结:

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

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

3. px = dp x 基准比例

从代码中获取相关数值


我们主要使用的类是:DisplayMetrics

以下为官方api说明

A structure describing general information about a display, such as its size, density, and font scaling.

To access the DisplayMetrics members, initialize an object like this:

  >> DisplayMetrics metrics = newDisplayMetrics(); 

getWindowManager().getDefaultDisplay().getMetrics(metrics);

这是一个获取屏幕信息的类,比如大小,密度等。以及初始化的方法。

实际运用如下:

http://www.taodudu.cc/news/show-5914862.html

相关文章:

  • 最近各大论坛铺天盖地“寻马甲包上架的广告”那么问题来了 什么是马甲包,有什么作用
  • Dice系数(Dice coefficient)与mIoU与Dice Loss
  • matlab数据显示格式,MATLAB的数据显示格式和控制运算精度
  • 我是如何准备高项的
  • GitHub怎么用 GitHub是什么 新手怎么用GitHub 图文并茂,不看都不行
  • 233333!B站又摊上大事了。。。
  • java手机号简单加密方法
  • 使用Python对手机号进行加密,超级简单
  • 手机号加密
  • 设置-安全-手机加密功能讲解
  • 我的爱情2
  • 爱情博奕论
  • 爱情博弈
  • 最向往的爱情
  • 爱情证书
  • 爱情专线
  • 浅谈爱情
  • CMS可视化项目-iframe嵌套 token Object.keys(data).map()遍历对象包数组的数据 select下拉菜单
  • axios get请求 post请求 多个并发请求 传值 后端接值
  • HTML基础-------HTML标签(2)
  • python教程15-作业讲解、集合的使用、集合运算符的使用、eval和json的使用
  • 类和对象(二)
  • 面向对象 -- 类与对象(B版)
  • opencv+python实战日记 入门篇(二)调整图片的尺寸、裁剪图像
  • opencv+python实战日记 入门篇(八)色块识别
  • 我和小美的撸码日记(3)之中的一个句话搞定MVC表单页数据绑定与提交
  • 我和小美的撸码日记(3)之一句话搞定MVC表单页数据绑定与提交
  • 考研日记——一个人去西安
  • 工作日记2011-10-9
  • 智能车四轮组打工日记(一)——主板的硬件设计

Android开发中dip,dpi,density,px等详解相关推荐

  1. Android开发中EditText:一、属性详解

    在android开发中,EditText组件是一个常用控件,也是一个比较重要的组件,它的基本属性需要熟练使用才行,接下来就来讲一下在Android开发中EditText组件的基本使用. 一.基本属性 ...

  2. Android开发的之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  3. android intent例程,Android开发(四)| 探究活动(详解Intent+大量实例)

    在Android的开发项目中,Activity(活动)是最容易吸引到用户的地方,因为相比于算法.架构,它是实际可见的. Activity是一个可以包含用户界面的组件,主要用于和用户进行交互.一个用户程 ...

  4. python定义栈_Python开发中栈的定义及用法详解

    前言 在Python开发中栈的设计和使用是常用到的,可以说是学习Python必须要掌握的一个技能,那么作为程序猿的你掌握了多少呢?掌握不熟练?没关系,跟着小编再来学习一下吧. 正文 栈是常用的数据结构 ...

  5. php pos 接收,PHP开发中php pos()函数的使用详解

    pos()是PHP中的内置函数,用于返回内部指针当前指向的数组中元素的值.返回值后,pos()函数不会递增或递减内部指针.在PHP中,所有数组都有一个内部指针.此内部指针指向该数组中的某个元素,该元素 ...

  6. android生命周期_Android开发 View的生命周期结合代码详解

    咱们以TextView控件为例: /** * Created by SunshineBoy on 2020/9/23. */ public class TestTextView extends and ...

  7. android listview下拉动画效果,Android开发中利用ListView实现一个渐变式的下拉刷新动画...

    Android开发中利用ListView实现一个渐变式的下拉刷新动画 发布时间:2020-11-23 16:50:31 来源:亿速云 阅读:80 作者:Leah 本篇文章给大家分享的是有关Androi ...

  8. android 最新 九宫格,Android开发中怎么显示一个九宫格图片

    Android开发中怎么显示一个九宫格图片 发布时间:2020-11-21 15:09:33 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关Android开发中怎么显示一个九宫格 ...

  9. android动画view上移,在Android开发中使用View制作一个引导动画

    在Android开发中使用View制作一个引导动画 发布时间:2020-11-20 16:46:16 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关在Android开发中使用V ...

最新文章

  1. 深刻剖析与实战BCELoss详解(主)和BCEWithLogitsLoss(次)以及与普通CrossEntropyLoss的区别(次)
  2. Kubernetes的Service
  3. 移动平均滤波_Kalman滤波理论与MATLAB实现引言
  4. 【JUC并发编程09】读写锁
  5. PMCAFF问答精选 | 对于用户反馈,产品经理需要第一时间给出回应吗?
  6. 下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...
  7. Android应用基础知识(4)---Android处理运行时变更
  8. 测试人员与开发人员之间的关系如何?
  9. ubuntu 怎么格式化U盘?(转载)
  10. php之thinkphp3.2.3 文件访问路径,URL路由配置-与重定向
  11. OpenCV-图像处理(03、Mat对象)
  12. 汇编语言-字符串大写转小写,小写转大写
  13. 贪吃蛇 (自我修改添加)
  14. 自定义拍照时 拍照界面_当生活中拍照不知道摆什么姿势时,可以试试动漫中这些动作...
  15. Alarmmanager制作简单闹钟功能
  16. 教你制作类双十一的可视化大屏
  17. vue3使用tinymce编辑器
  18. 一期每日一GO群分享-flag、viper、协程池、异常处理
  19. 立方车场系统显示电脑连不上服务器,立方停车场车辆出入智能管理系统.ppt
  20. x-admin前端模板左侧菜单栏消除记忆功能(清除缓存)

热门文章

  1. 《软件需求规格说明书》几点重要内容
  2. 【Android 进程保活】应用进程拉活 ( 双进程守护保活 )
  3. Dollar Dayz
  4. 架构实战:架构设计文档模板
  5. 『转贴』当中国和美国的32对灵魂在阴曹地府相遇.....
  6. 理解OAuth2协议原理
  7. 基于STM32开发板的循迹小车设计
  8. 《关于我怎么看待情人节这件事》
  9. v9php 碎片信息,PHPCMS V9模板中的常用变量、碎片代码详解
  10. 奇货可居,人工智能专家今年格外紧俏