package com.base.utils; import android.content.Context; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.WindowManager; /** * 代码中的单位转换 px dip sp * * @author perry * */ public class DensityUtils { public final static int PX = TypedValue.COMPLEX_UNIT_PX; public final static int DIP = TypedValue.COMPLEX_UNIT_DIP; public final static int SP = TypedValue.COMPLEX_UNIT_SP; /** * * @param unit * 单位 </br>0 px</br>1 dip</br>2 sp * @param value * size 大小 * @param context * @return */ public static float getDimensionPixelSize(int unit, float value, Context context) { DisplayMetrics metrics = new DisplayMetrics(); WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); switch (unit) { case PX: return value; case DIP: case SP: return TypedValue.applyDimension(unit, value, metrics); default: throw new IllegalArgumentException("unknow unix"); } } /** * 根据手机的屏幕属性从 dip 的单位 转成为 px(像素) * * @param context * @param value * @return */ public static float dip2px(Context context, float value) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return value * metrics.density; } /** * 根据手机的屏幕属性从 px(像素) 的单位 转成为 dip * * @param context * @param value * @return */ public static float px2dip(Context context, float value) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return value / metrics.density; } /** * 根据手机的屏幕属性从 sp的单位 转成为px(像素) * * @param context * @param value * @return */ public static float sp2px(Context context, float value) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return value * metrics.scaledDensity; } /** * 根据手机的屏幕属性从 px(像素) 的单位 转成为 sp * * @param context * @param value * @return */ public static float px2sp(Context context, float value) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return value / metrics.scaledDensity; } }