前言
由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,所以不同的品牌手机屏幕大小不一样,屏幕分辨率也不一样,这样对于我们来说,屏幕适配就是一个很大的问题,相对于苹果,android手机的屏幕实在是太多了,这里我不介绍如何进行屏幕适配,只是介绍下关于手机屏幕的几个参数。如果想知道如何进行屏幕适配请看这里:Android屏幕适配全攻略(最权威的官方适配指导)
屏幕尺寸
屏幕尺寸是指显示器屏幕对角线的尺寸,一般用英寸来表示。屏幕对角线长度转换为英寸即可得到屏幕尺寸。1英寸=2.54厘米。
屏幕分辨率(px)
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。
屏幕像素密度(dpi)
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关。
计算公式:屏幕对角线像素个数/屏幕尺寸。
例如:
HVGA屏320*480,一般是3.5寸,计算点密度为√ (320^2 + 480^2) / 3.5 = 164,约等于160,1pd=1px
WVGA屏480*800,按3.8寸屏算,点密度 √ (480^2 + 800^2) / 3.8 = 245,约等于240,1dp=1.5px。
屏幕无关像素(dp)
dip或dp (device independent pixels)屏幕无关像素, 与设备屏幕有关。
dp和px的换算:在dpi为160的手机屏幕上,1dp = 1px 。px = dpi/160 * dp
不同像素密度的屏幕种类
根据屏幕密度,一般分为这6种ldpi、mdpi、hdpi、xdpi、xxdpi,xxxhdpi,分别对应android stdio中资源文件夹下的drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xdpi、drawable-xxdpi,drawable-xxxhdpi几个文件夹。
密度 | 代表的分辨率(px) | 系统密度(dpi) | 1dp = ?px |
低密度(ldpi) | 240x320 | 120 | 0.75 |
中密度(mdpi) | 240x320 | 160 | 1 |
高密度(hdpi) | 480x800 | 240 | 1.5 |
超高密度(xhdpi) | 720x1280 | 320 | 2 |
超超高密度(xxhdpi) | 1080x1920 | 480 | 3 |
超超超高密度(xxxhdpi) | 3840×2160 | 640 | 4 |
相应的分辨率不一定代表dpi也是对应的,比如720x1280的设备不都是320dpi的,我也遇到过160dpi的,可使用wm命令查看。
usage: wm [subcommand] [options] wm size [reset|WxH] wm density [reset|DENSITY] wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM] wm size: return or override display size. wm density: override display density. wm overscan: set overscan area for display.
values文件夹的匹配规则
对于dimens.xml等,都是在values文件中,有时候为了适配,我们会新建其他的values文件夹,比如values-zh-rCN、values-hdpi-1920x1080、values-hdpi、values-1280x720
对于不同dpi的设备,匹配规则如下 dpi优先于尺寸
举例:有values-xhdpi-1920x1080 values-hdpi-1280x720两套布局文件
在hdpi 1920x1080的设备上,会使用 values-hdpi-1280x720
在xhdpi 1280x720的设备上,会使用values-xhdpi-1920x1080
如果是values-1920x1080 values-hdpi-1280x720这两套布局文件
在hdpi 1920x1080的设备上,会使用 values-hdpi-1280x720,因为dpi优先于尺寸。
几个常用尺寸
Launcher icon:48dp*48dp
Action bar icons:32dp*32dp
Small icons:16dp*16dp
Notification icons:24dp*24dp
工具网站
自动根据分辨率转换网站:http://pixplicity.com/dp-px-converter/
不同的values文件夹
一般来说,我们的项目里面只有一个values文件夹,当我们需要适配其他不同尺寸、分辨率的设备的时候,就需要新建对应的values,比如values-1280x800文件夹就对应的分辨率为1280x800的设备,当然我们也可以适配不同dpi的设备,比如values-hdpi就对应hdpi的设备。
参考网址:红黑联盟 、Android 屏幕适配