- 屏幕大小:屏幕对角线的长度,通常使用"寸"来表示
- 分辨率:指手机屏幕的像素点个数
- 屏幕像素密度(Pixels Per Inch):每英寸像素点个数。说的详细点就是对角线的像素点除以屏幕大小。
密度 | ldpi | mdpi | hdpi | xhpi | xxhdpi | xxxhdpi |
---|---|---|---|---|---|---|
密度值 | 120 | 160 | 240 | 320 | 480 | 640 |
分辨率 | 240X320 | 320X480 | 480X800 | 720X1280 | 1080X1920 | 2160X3840 |
- dpi(dot per inch)::每英寸像素点个数
- px(pixels):像素
- dp(device independent pixel):设备独立的像素, 与设备屏幕有关。
- sp(Scale-independent Pixel):比例独立的像素,类似dp, 主要处理字体的大小。
那么我们平时适配应该怎么去用他们呢?
敲了一个demo演示一下:
做完以后我得出结论
DisplayMetrics类
- density:显示的逻辑密度。影响dp(根据显示大小而改变)
- scaledDensity:显示屏上显示的字体的缩放比例。影响sp的(根据显示大小和字体大小而改变)
- widthPixels:宽度像素(不变)
- heightPixels:高度像素(不变)
- xdpi=ydpi:X\Y维中每英寸屏幕的确切物理像素(不变)
- densityDpi:屏幕密度以每英寸点数表示(根据显示大小而改变)
总结
知道这些以后我们就可以根据需要去适配。
字体大小
需要根据字体大小
而变化的我们就用sp。(例如:列表中的Textview)
而有些地方不许要根据字体大小
而变化的我们就用dp。(例如:Button中的Text大小、Dialog中的内容)
动态setTextSize()
总结
从源码我们可以看出动态setTextSize()
是根据sp
的。
这里适配的时候我们就要注意:
如果是改用sp的,我们直接填写值就好了。
但是如果是要用dp的,我们就要dp2sp了。
而自定义View中就是是根据px
的了,我们用的话就要根据情况dp2px、sp2px。
图片
我们都知道图片是用px的,如果一张图片你将它set为wrap_content
的话。
就会随着显示大小的改变而改变。