package com.classic.android.utils; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Rect; import android.support.annotation.NonNull; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager; /** * 与屏幕相关的工具类,可以方便的设置全屏模式,可以得到屏幕的宽度高度。 * * @author Jack Tony */ @SuppressWarnings({"unused", "WeakerAccess"}) public final class WindowUtil { private WindowUtil() { } /** * 设置当前界面为全屏模式 */ public static void setFullScreen(@NonNull Activity activity) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } /** * 如果当前为全屏,那么取消全屏模式,回到正常的模式 */ public static void cancelFullScreen(@NonNull Activity activity) { activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } /** * 判断当前手机是否是全屏 * * @return 如果是true,那么当前就是全屏 */ public static boolean isFullScreen(@NonNull Activity activity) { int flag = activity.getWindow().getAttributes().flags; return (flag & WindowManager.LayoutParams.FLAG_FULLSCREEN) == WindowManager.LayoutParams.FLAG_FULLSCREEN; } /** * 判断当前屏幕是否是横屏 * * @param activity 当前的activity * @return 如果true就是竖屏 */ public static boolean isVerticalScreen(@NonNull Activity activity) { int flag = activity.getResources().getConfiguration().orientation; return flag != 0; } /** * 获得屏幕高度 */ public static int getScreenWidth(@NonNull Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (wm != null) { DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } return 0; } /** * 获得屏幕宽度 */ public static int getScreenHeight(@NonNull Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (wm != null) { DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; } return 0; } /** * 获得状态栏的高度 */ public static int getStatusHeight(@NonNull Context context) { int statusHeight = -1; try { @SuppressLint("PrivateApi") 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; } /** * 获取当前屏幕截图,包含状态栏 */ public static Bitmap snapShotWithStatusBar(@NonNull Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache(); return bp; } /** * 获取当前屏幕截图,不包含状态栏 */ public static Bitmap snapShotWithoutStatusBar(@NonNull 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 = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } }