DisplayMetrics:dpi、px、dp、sp

  • 屏幕大小:屏幕对角线的长度,通常使用"寸"来表示
  • 分辨率:指手机屏幕的像素点个数
  • 屏幕像素密度(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演示一下:


image

做完以后我得出结论

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。

image

图片

我们都知道图片是用px的,如果一张图片你将它set为wrap_content的话。
就会随着显示大小的改变而改变。

WebView

你可能感兴趣的:(DisplayMetrics:dpi、px、dp、sp)