`
whotodo
  • 浏览: 169317 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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和QVGA5进制空间推荐使用这个。一种基于屏幕密度的抽象单位。设置一些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);
}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics