android中dip、dp、px、sp和屏幕密度

 

1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这    这个,不依赖像素。 

    这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。

2. dp: 很简单,和dip是一样的。 

3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。 

4.  sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。 

 

备注: 根据google的推荐,像素统一使用dip,字体统一使用sp  

 

在开发的过程中,UI给出的图片都是以像素为单位,也就是px,但是在使用的时候需要转换为dip使用。

分辨率720的px与dip转换为dip=(int)(px/2.0+0.5)  //+0.5是为了计算除2所得有小数的时候进位,当然不加也可以。

分辨率为360的px与dip转换为1:1。

 

 

 

/**

 * 将dip或dp值转换为px值,保证尺寸大小不变

 * 

 * @param dipValue

 * @param scale(DisplayMetrics类中属性density)

 * @return

 */

public static int dip2px(float dipValue, float scale) {

 return (int) (dipValue * scale + 0.5f);

}

 

/**

 * 将px值转换为dip或dp值,保证尺寸大小不变

 * 

 * @param pxValue

 * @param scale(DisplayMetrics类中属性density)

 * @return

 */

public static int px2dip(float pxValue, float scale) {

 return (int) (pxValue / scale + 0.5f);

}

 

/**

 * 将px值转换为sp值,保证文字大小不变

 * 

 * @param pxValue

 * @param fontScale(DisplayMetrics类中属性scaledDensity)

 * @return

 */

public static int px2sp(float pxValue, float fontScale) {

 return (int) (pxValue / fontScale + 0.5f);

}

 

/**

 * 将sp值转换为px值,保证文字大小不变

 * 

 * @param spValue

 * @param fontScale(DisplayMetrics类中属性scaledDensity)

 * @return

 */

public static int sp2px(float spValue, float fontScale) {

 return (int) (spValue * fontScale + 0.5f);

}

你可能感兴趣的:(Android,单位转换)