android中的屏幕单位介绍

时间:2021-02-04 17:45:55

1.px (pixels)(像素):是屏幕的物理像素点,与密度相关,密度大了,单位面
积上的px 会比较多。通常不推荐使用这个。

2.dip 或dp(与密度无关的像素):一个基于density(密度)的抽象单位,这个和设
备硬件有关,通常在开发中设置一些view 的宽高推荐用这个,一般情况下,在不同
分辨率,都不会有缩放的感觉。在运行时, Android 根据使用中的屏幕的实际密度, 透
明地处理任何所需dip 单位的缩放。

3.sp(与刻度无关的像素):同dip/dp 相似,会根据用户的字体大小偏好来缩放,
主要用于设置字体的大小。

density 值表示每英寸有多少个显示点,与分辨率是两个概念。
dip 到px 的转换公式: px = dip * (density / 160)
Android 官方定义dip 等价于160dpi 屏幕下的一个物理像素点, 即1dip=1px。
举例来说, 在240 dpi 的屏幕上, 1dip 等于1.5px。

dpi和px的换算

import android.content.Context;
public class DensityUtil {
public static int dip2px(Context context, float dipValue) {
final float scale =
context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue) {
final float scale =
context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}