Pixels和dp、sp的区别
不同屏幕密度下,1p显示的物理长度不同
1dp在不同屏幕上显示相同的物理长度
sp只用在字体上,和dp一样为了让在不同设备上有一致的显示效果
单位尺寸
搞清楚屏幕的各种单位含义,是屏幕适配的基础
屏幕尺寸
含义:手机对角线的物理尺寸
单位:英寸(inch),1英寸=2.54cm
屏幕尺寸、分辨率、像素密度三者关系
dpi 屏幕密度
含义:每英寸的像素点数
单位:dpi(dots per ich)
/**
* 获取屏幕密度比值
*/
fun getDpi(activity: AppCompatActivity): Float {
val w = activity.window.windowManager
val dm1 = DisplayMetrics()
w.defaultDisplay.getMetrics(dm1)
val density = dm1.density
return density
}
该屏幕的dpi=density*160dpi
在Android中,规定以160dpi(即屏幕分辨率为320x480 5.7英寸)为基准:1dp=1px
dp 密度无关像素
含义:density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关。
单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果
dp与px的转换
因为ui设计师给的设计图是以px为单位的,Android开发则是使用dp作为单位的,那么需要进行转换:
在Android中,规定以160dpi(即屏幕分辨率为320x480 5.7英寸)为基准:1dp=1px
px= dp (dpi/160)
px = dp * density
sp独立比例像素
含义:scale-independent pixel,叫sp或sip
单位:sp
Android开发时用此单位设置文字大小,可根据字体大小首选项进行缩放
推荐使用12sp、14sp、18sp、22sp作为字体设置的大小,不推荐使用奇数和小数,容易造成精度的丢失问题;
小于12sp的字体会太小导致用户看不清
TypedValue. 构建DP/PX
把Android系统中的非标准度量尺寸转变为标准度量尺寸 (Android系统中的标准尺寸是px, 即像素)
val with = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
350f,
context.resources.displayMetrics
)
以上就是屏幕适配的基础
标签:density,适配,像素,尺寸,Android,屏幕,dp From: https://blog.51cto.com/u_16163453/6534419