Android 屏幕适配基础

993 阅读2分钟

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的字体会太小导致用户看不清

www.jishudog.com/9089/html

TypedValue. 构建DP/PX

把Android系统中的非标准度量尺寸转变为标准度量尺寸 (Android系统中的标准尺寸是px, 即像素)

	val with = TypedValue.applyDimension(
			TypedValue.COMPLEX_UNIT_DIP,
			350f,
			context.resources.displayMetrics
  )

以上就是屏幕适配的基础