Android 长度单位dp , sp ,px总结
1 px:是屏幕的像素点。
2 dp:一种基于屏幕密度的抽象单位,英语全称:device independent pixcel。设备独立像素。
解释:
- dpi(dot per inch)是屏幕像素密度,就是1英寸上像素点的个数。针对一部手机dpi一定的。dpi越高,屏幕越清晰。在屏幕物理尺寸一样大时,分辨率越大,就是dpi越大。[代码中:getDeviceDensityDpi]
- 如dpi =160时,dp和px是一样的,1dp = 1px。
- px =(dpi/160)* dp
- landroid系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi)。
- density = dpi / 160 【代码中:getDeviceDensity】
3. sp(Scale-independentPixel):与dp类似,主要用于设置字体大小。但是可以根据用户的字体大小首选项进行缩放。【 与代码中的getDeviceScaledDensity相关 】
package cn.wonder.utils;
import android.content.Context;
public class DeviceParam
{
public static int getScreenWidthPx(Context mContext)
{
int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
return widthPixels;
}
public static int getScreenHeightPx(Context mContext)
{
int heightPixels = mContext.getResources().getDisplayMetrics().heightPixels;
return heightPixels;
}
public static float getDeviceDensity(Context mContext)
{
float density= mContext.getResources().getDisplayMetrics().density;
return density;
}
public static float getDeviceScaledDensity(Context mContext)
{
float sDensity= mContext.getResources().getDisplayMetrics().scaledDensity;
return sDensity;
}
public static int getDeviceDensityDpi(Context mContext)
{
int dpi= mContext.getResources().getDisplayMetrics().densityDpi;
return dpi;
}
/**
* dp 转换成 px
* @param context
* @param dipValue
* @return
*/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/**
* px 转换成 dp
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
http://blog.csdn.net/wang_jing_2008