1. Android中px、dp、sp详解
1.1. 名称解释
px(pixel): 即像素,1px代表屏幕上的一个物理的像素点。但px单位不被建议使用。由于分辨率不同,同样像素大小的图片在不同手机显示的实际大小可能不同。要用到px的情况是需要画1像素表格线或阴影线的时候,如果用其他单位画则会显得模糊。
dp(device independent pixel): dp是最常用也是最难理解的尺寸单位。与像素密度密切相关。
sp(scale independent pixel): 即与缩放无关的抽象像素。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时,1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。
屏幕像素密度:
ldpi:低密度屏幕;约为 120dpi。
mdpi:中等密度(传统 HVGA)屏幕;约为 160dpi。
hdpi:高密度屏幕;约为 240dpi。
xhdpi:超高密度屏幕;约为 320dpi。此项为 API 级别 8 中新增配置
xxhdpi:超超高密度屏幕;约为 480dpi。此项为 API 级别 16 中新增配置
xxxhdpi:超超超高密度屏幕使用(仅限启动器图标,请参阅“支持多种屏幕”中的注释);约为 640dpi。 此项为 API 级别 18 中新增配置
nodpi:它可用于您不希望缩放以匹配设备密度的位图资源。
tvdpi:密度介于 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) 、36x36 (xxhdpi) 、48x48 (xxxhdpi) 位图,依此类推。
如果您认为图像资源在电视或其他某些设备上呈现的效果不够好,而想尝试使用 tvdpi 资源,则缩放比例为 1.33*mdpi。例如,mdpi 屏幕的 100px x 100px 图像应该相当于 tvdpi 的133px x 133px。
1.2. 代码获取
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75/1.0/1.5/2.0/3.0/4.0)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120/160/240/320/480/640)
2. Android提供资源
Android提供资源,主要讲述了资源文件如图片,字符串,颜色,尺寸等存放路径:
https://developer.android.com/guide/topics/resources/providing-resources.html?hl=zh-cn#BestMatch
营运商与国家网络代码,为实现特殊营运商需求时查询用:
https://zh.wikipedia.org/wiki/%E7%A7%BB%E5%8A%A8%E8%AE%BE%E5%A4%87%E7%BD%91%E7%BB%9C%E4%BB%A3%E7%A0%81
9.png图片,主要是为了拉伸图片用,用微信聊天时显示的文字背景
https://www.zhihu.com/question/23727292
Android Studio项目概览:
https://developer.android.com/studio/projects/index.html#mipmap
mipmap和drawable文件夹的区别:
应当将启动图标放到res/mipmap/文件夹中,而不是drawable/文件夹,来确保启动图片使用最好的分辨率图标。
http://blog.csdn.net/lihenair/article/details/49871453
https://developer.android.com/training/multiscreen/screendensities.html
3. 参考文档:
https://www.zhihu.com/question/19625584
https://www.jianshu.com/p/5b7c01e579ff
https://developer.android.com/guide/practices/screens_support.html?hl=zh-cn