Android 获取屏幕数据

    xiaoxiao2025-04-25  12

    运行效果图

         

    为了方便获取屏幕相关的数据,写了个屏幕工具类

    //获取屏幕的宽高(包含虚拟按键) public static Point getScreenSize(@NonNull final Activity context) { WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); final Display display = windowManager.getDefaultDisplay(); Point outPoint = new Point(); display.getSize(outPoint); return outPoint; } //获取屏幕的宽高(包含虚拟导航栏) public static Point getScreenRealSize(@NonNull final Activity context) { WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); final Display display = windowManager.getDefaultDisplay(); Point outPoint = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {// 可能有虚拟按键的情况 display.getRealSize(outPoint); } else {// 不可能有虚拟按键 display.getSize(outPoint); } return outPoint; } //获取屏幕的宽高(包含虚拟按键) public static Point getScreenSizeDP(@NonNull final Activity context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(outMetrics); int widthPixels = outMetrics.widthPixels; int heightPixels = outMetrics.heightPixels; int densityDpi = outMetrics.densityDpi; float density = outMetrics.density; int x_dp = (int) (outMetrics.widthPixels / density); int y_dp = (int) (outMetrics.heightPixels / density); return new Point(x_dp,y_dp); } //获取状态栏高度 public static int getStatusBarHeight(@NonNull final Activity context) { int result = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (result > 0) { return context.getResources().getDimensionPixelSize(result); } return 0; } //获取导航栏高度 public static int getNavigationBarHeight(@NonNull final Activity context) { int result = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); if (result > 0){ return context.getResources().getDimensionPixelSize(result); } return 0; } //是否有虚拟导航栏 public static boolean hasNavigationBar(@NonNull final Activity context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Point size = getScreenSize(context); Point realSize = getScreenRealSize(context); return realSize.y != size.y || realSize.x != size.x; } else { boolean menu = ViewConfiguration.get(context).hasPermanentMenuKey(); boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); if(menu || back) { return false; }else { return true; } } } //NavigationBar显示/隐藏 public static boolean isNavigationBarShow(@NonNull final Activity context){ if (!hasNavigationBar(context)) { return false; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Point size = getScreenSize(context); Point realSize = getScreenRealSize(context); Rect visibleRect = getScreenVisibleRect(context); return visibleRect.bottom != realSize.y && realSize.y!=size.y; }else { boolean menu = ViewConfiguration.get(context).hasPermanentMenuKey(); boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); if(menu || back) { return false; }else { return true; } } } //应用显示区域 public static Rect getScreenVisibleRect(@NonNull final Activity context) { Rect outRect = new Rect(); context.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect); return outRect; }

    Demo下载

    最新回复(0)