基本概念
1. 屏幕尺寸
屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
2.屏幕分辨率
在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080
3.屏幕像素密度
每英寸上的像素点数,单位是dpi/ppi即“dot per inch” / “pixel per inch”的缩写, 屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
4.px
分辨率度量单位,Android原生API都会以px作为统一的计量单位,像是获取屏幕宽高等
5.dip/dp (layout布局御用单位)
DensityIndependent Pixels是一种密度无关像素,对应于 160 dpi 下像素的物理尺寸。在定义ui布局时应适用的虚拟像素单位。 dp转换为px的公式 px = dp *(dpi / 160)
6.dpi
像素密度
7.Sp
scale-independentpixels可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。
8. 分辨率归类
hdpi:1.5
mdpi:1.0(基准)
ldpi:0.75
ldpi 低密度 (0.75)
Mdpi 中密度(1.0 基准)
hdpi 高密度(1.5)
xhdpi 超高密度 (2.0)
xxhdpi 超超高密度 (3.0)
xxxhdpi 超超超高密度 (4.0)
nodpi:它可用于您不希望缩放以匹配设备密度的位图资源。
tvdpi:(1.33)密度介于 mdpi 和 hdpi 之间的屏幕;约为 213dpi。它并不是“主要”密度组, 主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将根据需要对其进行缩放。此项为 API 级别 13 中新增配置
anydpi:此限定符适合所有屏幕密度,其优先级高于其他限定符。 这对于矢量可绘制对象很有用。 此项为 API 级别 21 中新增配置
六个主要密度之间的缩放比为 3:4:6:8:12:16(忽略 tvdpi 密度)。因此,9x9 (ldpi) 位图相当于 12x12 (mdpi)、18x18 (hdpi)、24x24 (xhdpi) 位图,依此类推。
如果您认为图像资源在电视或其他某些设备上呈现的效果不够好,而想尝试使用 tvdpi 资源,则缩放比例为 1.33*mdpi。例如,mdpi 屏幕的 100px x 100px 图像应该相当于 tvdpi 的133px x 133px
提供备用的位图,即从UI要的图片,如何规定大小呢?综上所述的,一般UI给的图都是像素单位px,但是android屏幕布局使用单位dp,不同的分辨率,像素密度是不一样的,因此就有了根据上图的倍数换算的参考。如需生成这些图像,您应以矢量格式的原始资源为基础,按以下尺寸缩放比例生成每种屏幕密度对应的图像:
这意味着,如果您为 xhdpi 设备生成了一幅 200x200 的图像,则应分别按 150x150、100x100 和 75x75 图像密度为 hdpi 设备、mdpi 设备和 ldpi 设备生成同一资源。然后,将生成的图片文件置于 res/ 下的相应子目录中,系统将自动根据运行您的应用的设备的屏幕密度选取正确的文件:
MyProject/res/
drawable-xhdpi/awesomeimage.png
drawable-hdpi/awesomeimage.png
drawable-mdpi/awesomeimage.png
drawable-ldpi/awesomeimage.png
之后,每当您引用 @drawable/awesomeimage 时,系统便会根据屏幕 dpi 选择相应的位图。
将您的启动器图标置于 mipmap/ 文件夹中。
res/...
mipmap-ldpi/...finished_launcher_asset.png
mipmap-mdpi/...finished_launcher_asset.png
mipmap-hdpi/...finished_launcher_asset.png
mipmap-xhdpi/...finished_launcher_asset.png
mipmap-xxhdpi/...finished_launcher_asset.png
mipmap-xxxhdpi/...finished_launcher_asset.png