[整理]Android屏幕适配(不同的屏幕分辨率和尺寸)

2023-11-03

Android屏幕适配

目录:

在实际开发过程中,会遇到不同的机型,为了让控件和布局要在不同屏幕上显示相近的样子,就得在drawable-ldpi/mdpi/hdpi/xhdpi/xxhdpi不同的文件夹下放置图片素材或者在xml中用dp作为间距单位,用sp作为文字的单位。因此要搞清楚他们的关系,否则会很纠结,或者浪费大量的时间调整界面。

概念区分

  • px(pixels)像素,屏幕上的点,不同设备显示效果相同,例如,HVGA代表320×480像素。
  • in(英寸)屏幕的物理尺寸, 每英寸等于2.54厘米。
    • 例如我们经常说的手机屏幕大小有,5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是4英寸,表示手机的屏幕(可视区域)对角线长度是4 X 2.54 = 10.16厘米。
  • pt(point)标准长度单位, 1pt=1/72英寸,用于印刷业,UI设计师会用,iOS字体单位,Android开发不涉及。
  • dpi(dots per inch) 打印分辨率,每英寸所能打印的点数,即打印精度; 每英寸点数,即每英寸包含像素个数。
    • 比如320X480分辨率的手机,宽2英寸,高3英寸, 每英寸包含的像素点的数量为320/2=160dpi(横向)或480/3=160dpi(纵向),160就是这部手机的dpi,横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。
  • ppi (pixels per inch)图像分辨率, 像素密度,在图像中, 每英寸所包含的像素数目。
  • density(屏幕密度), density和dpi的关系为 density = dpi/160。density这个概念方便理解不同dpi的倍数关系。
  • dp(也即dip,device independent pixels)设备独立像素,Android特有的单位,与密度无关的像素,基于屏幕密度的抽象单位,在320x480分辨率,同时每英寸160点(dpi = 160)的显示器上,1dp = 1px。
  • sp(scaled pixels)放大像素,与刻度无关的像素,字体单位,可以根据用户的字体大小首选项进行缩放。sp和dp一样,是android开发里特有的单位, 查看TextView的源码可知 Android 默认使用 sp 作为字号单位。以160ppi屏幕为标准,当字体大小为 100%时, 1sp=1px。

为什么要把sp和dp代替px?最简单的原因是他们不会因为ppi的变化而变化,在相同物理尺寸和不同ppi/dpi下,他们呈现的高度大小是相同。也就是说更接近物理呈现,而px则不行。

换算关系

px = dp * (dpi / 160),原来这里的dpi是归一化后的dpi。
则dp = px / (ppi / 160)
ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

疑问:dpi和ppi是不是数值等同的?为何文档中的计算方式对不上?

划分标准

Google官方指定的dpi区分标准(第1列和第2列):

名称 像素密度范围 屏幕密度 图片icon尺寸
drawable-ldpi ppi=120-160 density=0.75 36*36
drawable-mdpi ppi=160-240 density=1(baseline) 48*48
drawable-hdpi ppi=240-320 density=1.5 72*72
drawable-xhdpi ppi=320-480 density=2 96*96
drawable-xxhdpi ppi=480-640 density=3 144*144
drawable-xxxhdpi ppi=640-800 density=4 192*192

* 小规律:比值(各种屏幕密度的比值)
ldpi:mdpi:hdpi:xhdpi:xxhdpi:xxxdpi = 0.75:1:1.5:2:3:4 = 3:4:6:8:12:16
这个比值乘以12就得到对应屏幕密度手机桌面icon图标大小

Android手机常见尺寸和对应分辨率

  • 摘自网络,有待验证。
4:3 尺寸 对应分辨率
VGA 640*480 (Video Graphics Array) -
QVGA 320*240 (Quarter VGA) -
HVGA 480*320 (Half-size VGA) mdpi
SVGA 800*600 (Super VGA) -
5:3 尺寸 对应分辨率
WVGA 800*480 (Wide VGA) hdpi
16:9 尺寸 对应分辨率
FWVGA 854*480 (Full Wide VGA) hdpi
HD 1920*1080 High Definition -
QHD 960*540 hdpi
720p 1280*720 xhdpi
1080p 1920*1080 xxhdpi

部分Android测试机分析

   在项目开发过程中,遇到屏幕很大的手机,结果显示的图标却很小,和预期不一致,例如华为机型MT1-U06。
   原因是:真机屏幕的ppi会取和谷歌标准最相近的标准ppi,然后density按照最相近的ppi来定。

以谷歌的标准,按安卓屏幕宽度为例,一般来说480px对应的density是1.5(也就是hdpi)对应320dp,720px对应的density是2.0(也就是xhdpi)对应360dp,1080px对应的density是3.0(也就是xxhdpi)对应360dp;

如果非要拿屏幕ppi说事的话,就是这样,以160ppi为基准,160ppi对应的density是1.0,240ppi对应的density是1.5,320ppi对应的density是2.0…

部分机型屏幕尺寸、分辨率计算:

  • 三星Note5 ,主屏尺寸:5.7英寸,2560×1440像素,测试为xxdpi
    • ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 = √(2560² + 1440²) / 5.7=√ 6553600 + 2073600 /5.7 = √ 8627200 /5.7 = 2937.2 /5.7 =515.3
    • density = dpi/160 = 515.3/160 = 3.22
  • 摩托诺拉Nexus6 ,主屏尺寸:5.96英寸,2560×1440像素,测试为xxdpi
    • ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 = √(2560² + 1440²) / 5.96 =√ 6553600 + 2073600 /5.96 = √ 8627200 /5.96 = 2937.2 /5.96 =492.8
    • density = dpi/160 = 492.8/160 = 3.08
  • 一加A1001 ,主屏尺寸:5.5英寸,1920×1080像素,测试为xxdpi
    • ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 = √(1920² + 1080²) / 5.5 =√ 3686400 + 1166400 /5.5 = √ 4852800 /5.5 = 2202.9 /5.5 =440.6
    • density = dpi/160 = 440.6/160 = 2.75
    • 就近原则,对应dpi为xxdpi,与测试结果一致
  • Nexus 5,屏幕尺寸是4.95英寸,分辨率是1920×1080像素(FHD),测试为xxdpi
    • ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 =2202.9 /4.95 =445
    • density = dpi/160 = 445/160 = 2.78
    • 同理,就近原则,对应dpi为xxdpi,与测试结果一致
  • 红米note2 ,主屏:5.5英寸,1920x1080像素,但是测试时选择了xdpi
    • ppi同一加A1001,本应选择xxdpi,测试却是xdpi
    • 所以,有不确定性
  • 华为MT1-U06,屏幕6.1英寸(机身尺寸:64.8*129*7.69mm),像素1280×720px;对应hdpi
    • ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 = √(1280² + 720²) / 6.1 =√ 1638400 + 518400 /6.1 = √ 2156800 /6.1 = 1468.6 /6.1 =240.75
    • density = dpi/160 = 240.75 /160 = 1.5
    • 这个数值,刚刚好是hdpi!
  • 三星galaxy s4 ,主屏:5英寸,1920x1080像素,xxdpi
    • ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 =2202.9 /5 =440.6
    • density = dpi/160 = 440.6/160 = 2.75
    • 同理,就近原则,对应dpi为xxdpi,与测试结果一致

回到本节开头的疑惑

   所以,你以为那么大屏幕怎么着是xxhdpi,结果呢?人家只是hdpi。。。所以,屏幕大,真心说明不了神马啊

补充.9图的使用说明

9.png格式的图片是Android平台上新创的一种被拉伸却不失真的东东。

.9格式的图片占用资源很小,一般一个几KB或者几十KB的图片会变成几百个字节,有利于节省流量和提高加载速度。 注意图片尺寸定义: .9格式的图片四周不普通的png图片相比多了一个像素位的白色区域,该区域只有在图片被还原和制造的时候才能看到,当打包后无法看见,并且图片的总像素会增大2个像素,比如23x23像素的9.png图片被打包后会变成25x25像素。所以我们在制作的时候要注意掌握尺寸。

.9图上下左右黑边的含义:
上黑色条位置向下覆盖的区域表示图片横向拉伸时,只拉伸该区域;
左黑色条位置向右覆盖的区域表示图片纵向拉伸时,只拉伸该区域;
右黑色条位置向左覆盖的区域表示图片纵向显示内容的区域;
下黑色条位置向上覆盖的区域表示图片横向显示内容的区域;
四角没有黑色条的位置覆盖的区域是图片拉伸时保持不变(如果图片的四角为弧形时,四角弧形均不变)。
简言之,上和左控制拉伸,必须设置;右和下控制内部显示区域,可选。


[1]: http://m.blog.csdn.net/blog/chuangzaozhe1/28610941 android常见分辨率(mdpi/ hdpi/ xhdpi/ xxhdpi)屏幕适配,2014-6-5
[2]: http://www.cocoachina.com/android/20151030/13971.html Android屏幕适配全攻略(最权威的官方适配指导),2015-10-30
[3]: http://zhuanlan.zhihu.com/zhezhexiong/19565895 [无线手册-4] dp、sp、px傻傻分不清楚[完整] ,2013年,折折熊
[4]: http://blog.csdn.net/shimiso/article/details/29826073 Android视觉规范-间距规范与文字规范单位换算(dip、sp与px),2014-06-10
[5]: https://www.zhihu.com/question/33312136/answer/56502383 网上流传的dp、px换算公式是正确的吗?2015-7-26
[6]: http://www.it165.net/pro/html/201509/54281.html 最清晰的Android多屏幕适配方案,soaringEveryday,2015-09-24
[7]:http://www.cnblogs.com/lianghui66/archive/2013/01/08/2850581.html Android .9文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[整理]Android屏幕适配(不同的屏幕分辨率和尺寸) 的相关文章

随机推荐

  • Django项目想要在 Python Console里面进行操作 报错找不到对应模块

    Django项目想要在 Python Console里面进行操作 报错找不到对应模块 问题描述 ModuleNotFoundError No module named django 问题原因 在进行对 Python console操作 进行
  • 6.1-深度学习简介

    文章目录 一 深度学习的三个步骤 1 1 全连接前馈网络 Fully Connect Feedforward Network 1 2 矩阵运算 Matrix Operation 1 3 手写数字辨识 二 确定评价函数 goodness of
  • 静电电容

    1 用电容进行ESD的防护只能用数pF到数百pF的小电容 这里关注的不是容量而是串联等效电感参数 静电放电极快 对应极高的频率 耐压的问题不用考虑 因为静电源内阻极高 能量很小 放电时电压跌落极快 2 理论上讲大电容并不会因为时间常数的增加
  • ❤echarts折线图完整使用及详细配置参数

    echarts折线图完整使用及详细配置参数 进入echarts官网 查看案例 下面说说一些echarts图的调节 一 配置echarts具体参数 01 基础版本的折线图 option xAxis type category data Mon
  • 将gif图转成静态图片显示canvas

    需求描述 仅一张gif动图 进入页面 呈现静态图片显示 点击 gif图显示 代码实现
  • uniapp全局分享以及指定页面分享禁用的设置

    1 创建share js文件 module exports onLoad 设置默认的转发参数 share title 默认为小程序名称 path 默认为当前页面路径 imageUrl 默认为当前页面的截图 白名单 const urlList
  • Apollo学习笔记

    Apollo学习笔记 Apollo课程 智能驾驶入门课程 无人驾驶概览 1 软件层分为三层 实时操作系统 RTOS 确保在给定时间内完成特定任务 实时时确保系统稳定性 驾驶安全性的重要要求 通过在Ubuntu Linux操作系统加入Apol
  • 带有Cookie功能的HTTP访问函数,GET,PUT/POST

    define AFX INET SERVICE FTP INTERNET SERVICE FTP define AFX INET SERVICE HTTP INTERNET SERVICE HTTP define AFX INET SERV
  • Oracle删除数据的三种方式

    Oracle删除数据的三种方法 删除表 记录和结构 的语句delete truncate drop drop命令 drop table 表名 例如 删除学生表 student drop table student 注意 1 用drop删除表
  • node.js学习——初始node,node基本介绍,环境安装,运行第一个node程序。

    node js学习 初始node node基本介绍 环境安装 运行第一个node程序 1 node基本介绍 为什么学习Node js 什么是node js Node js的特性 Node js能做什么 2 Node环境安装 环境安装 3 第
  • Oracle中connect by...start with...的使用

    一 语法 大致写法 select from some table where 条件1 connect by 条件2 start with 条件3 其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果 wh
  • android studio导入源码(来自github上下载的压缩包)

    Francis学习笔记之android studio解决系列一 andorid studio导入源码问题及android studio 中途出错解决办法 一 导入源码 首先看一下从github下载的压缩包解压后文件内容 从上面发现没有gra
  • 【深度长文】循序渐进解读Oracle AWR性能分析报告

    深度长文 循序渐进解读Oracle AWR性能分析报告 原创 2016 10 19 韩锋 DBAplus社群 http mp weixin qq com s biz MzI4NTA1MDEwNg mid 2650757102 idx 1 s
  • Android onNewIntent调用时机

    1 onNewIntent 首先看一下Activity 的生命周期 从图中可知 初次启动 Activity 时 调用顺序为 onCreate gt onStart gt onResume 那么 onNewIntent 是什么时候被触发的呢
  • 动态解析ipv6地址,实现域名访问家里网络

    前提已有IPv6地址 有阿里云的域名 非顶级域名便宜 一般几块一年 脚本实现方式 获取token 如果没有创建一个 获取阿里云AccessToken 修改脚本变量值 运行后运行脚本 即可在域名解析找到新增的记录 因为供应商提供dns不固定
  • 一文带你熟练掌握android的arm32汇编指令。

    1 ARM32的常见指令解析 ADC 带进位加法指令 ADD 加法指令 AND 逻辑与指令 B 分支指令 BIC 位清零指令 BL 带返回的分支指令 BLX 带返回和状态却换的分支指令 BX 带状态却换的分支指令 CDP 协处理器数据操作指
  • 内联函数inline和宏定义

    内联函数inline和宏定义 内联函数的优越性 一 inline定义的类的内联函数 函数的代码被放入符号表中 在使用时直接进行替换 像宏定义一样展开 没有了调用的开销 效率很高 二 类的内敛函数是一个真正的函数 三 使用内联函数inline
  • 【华为OD机试】 比赛的冠亚季军【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 有N 3 N lt 10000 个运动员 他们的id为0到N 1 他们的实力由一组整数表示 他们之间进行比赛 需要决出冠亚军 比赛的规则是0号和1号比赛 2号和3号比
  • Python网络爬虫--项目实战(2)--起点小说爬取

    一 目标 爬取起点小说一本免费小说 并将所有章节名称和内容都保存到本地 我选择爬取 我真的好想打球 二 分析 2 1 网页分析 ctrl U 进入网页的源代码 输入任意章节名称 可以在代码中找到 初步判定该网页为静态加载的 2 2 反爬分析
  • [整理]Android屏幕适配(不同的屏幕分辨率和尺寸)

    Android屏幕适配 目录 Android屏幕适配 概念区分 换算关系 划分标准 Android手机常见尺寸和对应分辨率 部分Android测试机分析 补充9图的使用说明 在实际开发过程中 会遇到不同的机型 为了让控件和布局要在不同屏幕上