我的测试机器是华为mate10,参数如下:
屏幕尺寸:5.9英寸
分辨率:2560*1440
Android系统8.0
屏幕像素密度:498ppix
用代码获取
int width = defaultDisplay.getWidth(); // 1080
int height = defaultDisplay.getHeight();// 1920
Log.d(TAG, "width : " + width + " height : " + height);
DisplayMetrics displayMetrics = new DisplayMetrics();
defaultDisplay.getMetrics(displayMetrics);
float density = displayMetrics.density;// 3.0
Log.d(TAG, "density : " + density);
int densityDpi = displayMetrics.densityDpi; // 480
Log.d(TAG, "densityDpi : " + densityDpi);
float xdpi = displayMetrics.xdpi; // 501.041
float ydpi = displayMetrics.ydpi; // 500.184
Log.d(TAG, "xdpi : " + xdpi + " ydpi : " + ydpi);
int widthPixels = displayMetrics.widthPixels; //1080
int heightPixels = displayMetrics.heightPixels;//1920
Log.d(TAG, "widthPixels : " + widthPixels + " heightPixels : " + heightPixels);
概念
屏幕尺寸
屏幕尺寸就是屏幕对角线的长度,单位是英寸
1英寸 = 2.54厘米
屏幕分辨率
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1920 * 1080。
image.png分辨率比
所谓的分辨率比就是所所的16:9 4:3。例如1920*1080 的分辨率比就是16:9,
屏幕的像素密度
屏幕的像素密度是指每英寸有多个像素。单位是dpi,dots per inch。
image.png image.png-
六种通用的密度:
- ldpi(低)~120dpi
- mdpi(中)~160dpi
- hdpi(高)~240dpi
- xhdpi(超高)~320dpi
- xxhdpi(超超高)~480dpi
- xxxhdpi(超超超高)~640dpi
密度无关像素 (dp)
Density Independent Pixels,即密度无关像素,即dp或dip。与终端上的实际物理像素点无关。可以保证在不同的屏幕像素密度的的设备上显示相同的效果。
- 160dpi, 1dp = 1px
- 240dpi, 1dp = 1.5px
- 320dpi, 1dp = 2px
- 480dpi, 1dp = 3px
- 640dpi, 1dp = 4px
独立比例像素
Scale Independent Pixels, 即sp或sip。
Android开发时用此单位设置文字大小,可根据字体大小首选项进行缩放,推荐使用12sp、14sp、18sp、22sp作为字体设置的大小,不推荐使用奇数和小数,容易造成精度的丢失问题,小于12sp的字体会太小导致用户看不清。
mdpi、hdpi、xdpi、xxdpi
hdpi、xdpi、xxdpi用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。
image.png在设计图标时,对于五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)应按照 2:3:4:6:8 的比例进行缩放。例如,一个启动图标的尺寸为48x48 dp,这表示在 MDPI 的屏幕上其实际尺寸应为 48x48 px,在 HDPI 的屏幕上其实际大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其实际大小是 MDPI 的 2 倍 (96x96 px),依此类推。
虽然 Android 也支持低像素密度 (LDPI) 的屏幕,但无需为此费神,系统会自动将 HDPI 尺寸的图标缩小到 1/2 进行匹配。
下图为图标的各个屏幕密度的对应尺寸
image.png
ppi sp dp转换
dp-px-ppi的转换公式:
dp*ppi/160 = px
px = dp*ppi/160
dp = px / (ppi / 160)
px = sp*ppi/160
sp = px / (ppi / 160)
dp ≈ sp
网友评论