package com.cheng.utils; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.View; import android.view.inputmethod.InputMethodManager; /** * 系统显示相关工具类 */ public final class DisplayUtil { /** * Don't let anyone instantiate this class. */ private DisplayUtil() { throw new Error("Do not need instantiate!"); } /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) * @param context 上下文 * @param dpValue 尺寸dip * @return 像素值 */ public static int dp2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 根据手机的分辨率从 px(像素) 的单位 转成为 dp * @param context 上下文 * @param pxValue 尺寸像素 * @return DIP值 */ public static int px2dp(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 根据手机的分辨率从 px(像素) 的单位 转成为 sp * @param context 上下文 * @param pxValue 尺寸像素 * @return SP值 */ public static int px2sp(Context context, float pxValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 根据手机的分辨率从 sp 的单位 转成为 px * @param context 上下文 * @param spValue SP值 * @return 像素值 */ public static int sp2px(Context context, float spValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } /** * 获取dialog宽度 * * @param activity Activity * @return Dialog宽度 */ public static int getDialogW(Activity activity) { DisplayMetrics dm = new DisplayMetrics(); dm = activity.getResources().getDisplayMetrics(); int w = dm.widthPixels - 100; // int w = aty.getWindowManager().getDefaultDisplay().getWidth() - 100; return w; } /** * 获取屏幕宽度 * * @param activity Activity * @return 屏幕宽度 */ public static int getScreenW(Activity activity) { DisplayMetrics dm = new DisplayMetrics(); dm = activity.getResources().getDisplayMetrics(); int w = dm.widthPixels; // int w = aty.getWindowManager().getDefaultDisplay().getWidth(); return w; } /** * 获取屏幕高度 * * @param activity Activity * @return 屏幕高度 */ public static int getScreenH(Activity activity) { DisplayMetrics dm = new DisplayMetrics(); dm = activity.getResources().getDisplayMetrics(); int h = dm.heightPixels; // int h = aty.getWindowManager().getDefaultDisplay().getHeight(); return h; } /** * Toggle keyboard If the keyboard is visible,then hidden it,if it's * invisible,then show it * * @param context 上下文 */ public static void toggleKeyboard(Context context) { InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); } } /** * 获得状态栏的高度 * * @param context * @return */ public static int getStatusHeight(Context context) { int statusHeight = -1; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int height = Integer.parseInt(clazz.getField("status_bar_height") .get(object).toString()); statusHeight = context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return statusHeight; } /** * 获取当前屏幕截图,包含状态栏 * * @param activity * @return */ public static Bitmap snapShotWithStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); int width = getScreenW(activity); int height = getScreenH(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache(); return bp; } /** * 获取当前屏幕截图,不包含状态栏 * * @param activity * @return */ public static Bitmap snapShotWithoutStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; int width = getScreenW(activity); int height = getScreenH(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } }