import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 屏幕参数获取,转换工具类 * * @author lixuan */ public class ScreenUtil { public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f * (dipValue >= 0 ? 1 : -1)); } public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f * (pxValue >= 0 ? 1 : -1)); } public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 获取状态栏高度 * * @param context 上下文 * @return int 状态栏高度 */ public static int getStatusBarHeight(Context context) { try { Class<?> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int height = Integer.parseInt(field.get(obj).toString()); return context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return 75; } /** * 获取屏幕分辨率 * * @return int[] */ public static int[] getScreenResolution(Activity activity) { DisplayMetrics mDisplayMetrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics); return new int[]{ mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels }; } /** * 获取底部虚拟键盘的高度 * * @return int */ public static int getBottomKeyboardHeight(Activity activity){ int vh = 0; @SuppressLint("WrongConstant") WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); DisplayMetrics dm = new DisplayMetrics(); try { @SuppressWarnings("rawtypes") Class c = Class.forName("android.view.Display"); @SuppressWarnings("unchecked") Method method = c.getMethod("getRealMetrics", DisplayMetrics.class); method.invoke(display, dm); vh = dm.heightPixels - windowManager.getDefaultDisplay().getHeight(); } catch (Exception e) { e.printStackTrace(); } return vh; } }