android 尺寸

Oct 21, 2015


  • dp <=> px
public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * (metrics.densityDpi / 160f);
    //  float px = dp * metrics.density;
    return px;
}

public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / (metrics.densityDpi / 160f);
    // float dp = px / metrics.density;
    return dp;
}

metrics.densityDpi 是屏幕像素密度,即一英寸有多少个像素,

标准情况下1dp=1px,即设备的像素密度为160

  • 另一种实现
public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
    return px;
}
  • sp <=> px
public static int px2sp(Context context, float pxValue) {
		final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
		return (int) (pxValue / fontScale + 0.5f);
}

public static int sp2px(Context context, float spValue) {
		final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
		return (int) (spValue * fontScale + 0.5f);
}

因为使用px的时候,需要的是整数,因此可以利用4舍5入法转换。

  • 另一种实现
// 此类方法可以将多重尺寸单位转化成px(像素)
public static float convertDpToPixel(float sp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics);
    return px;
}