现在的位置: 首页 > 综合 > 正文

Android屏幕大小和密度对照表,以及px、dip、sp等像素单位的解释

2013年04月04日 ⁄ 综合 ⁄ 共 1624字 ⁄ 字号 评论关闭

px(Pixels ,像素):对应屏幕上的实际像素点。
in(Inches ,英寸):屏幕物理长度单位。
mm(Millimeters ,毫米):屏幕物理长度单位。
pt(Points ,磅):屏幕物理长度单位,1/72英寸。
dp(与密度无关的像素):逻辑长度单位,在 160 dpi 屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。
dip:与dp相同,多用于Google示例中。
sp(与密度和字体缩放度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。

一直对px、dip、sp、dp这几个单位概念很模糊。网上查了下,基本理论上是清楚了。

1.px (pixels)(像素):屏幕上的点 ,与密度相关。密度大了,单位面积上的px会比较多。

2.dip或dp(与密度无关的像素)。这个和设备硬件有关,为了支持WVGA、HVGA和QVGA 5进制空间推荐使用这个。一种基于屏幕密度的抽象单位。设置一些view的宽高可以用这个,一般情况下,在不同分辨率,都不会有缩放的感觉。如果用px的话,320px占满HVGA的宽度,到WVGA上就只能占一半不到的屏幕了,那一定不是你想要的。
3.sp(与刻度无关的像素)放大像素– 主要处理字体的大小。

屏幕大小和密度对照表 :

下面是在manifest中设置app在不同分辨率时,是否支持多密度的方法。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
</manifest>


转换:
dip和px之间的转换很简单,下面是dip和px的工具类。

/**
 * 密度常量设置,提供dip转换为px的方法
 * 
 * @author zuolongsnail
 * 
 */
public final class DensityConst {
    /** 默认密度 */
    public static float density = 1.0f;
    /** 默认每英寸像素数 */
    public static int densityDpi = 160;

    /**
     * 初始化与密度相关的所有变量值
     * 
     * @param activity
     */
    public static void initDensity(Activity activity) {
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        density = dm.density;
        densityDpi = dm.densityDpi;
    }

    /**
     * dip转化为像素
     * 
     * @param dip
     * @return
     */
    public static int getPx(int dip) {
        return (int) (dip * density);
        // return (int)(dip*(densityDpi/160));

    }

    /**
     * 像素转化为dip
     * 
     * @param px
     * @return
     */
    public static int getDip(int px) {
        return (int) (px / density);
        // return (int)((px*160)/densityDpi);
    }
}

抱歉!评论已关闭.