Android开发之获取屏幕宽高、屏幕密度、截取屏幕、全屏、横竖屏切换-ScreentUtils

原创 2018年04月15日 15:01:38

在开发中,经常会用到屏幕相关的操作,比如,获取屏幕宽高、屏幕密度、截取屏幕、全屏、横竖屏切换等等,因此,在这稍加整理以下内容

获取屏幕宽度
public static int getScreenWidth() {
        WindowManager wm = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE);
        if (wm == null) {
            return Utils.getApp().getResources().getDisplayMetrics().widthPixels;
        }
        Point point = new Point();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            wm.getDefaultDisplay().getRealSize(point);
        } else {
            wm.getDefaultDisplay().getSize(point);
        }
        return point.x;
}
获取屏幕高度
public static int getScreenHeight() {
        WindowManager wm = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE);
        if (wm == null) {
            return Utils.getApp().getResources().getDisplayMetrics().heightPixels;
        }
        Point point = new Point();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            wm.getDefaultDisplay().getRealSize(point);
        } else {
            wm.getDefaultDisplay().getSize(point);
        }
        return point.y;
}
获取屏幕密度
public static float getScreenDensity() {
        return Utils.getApp().getResources().getDisplayMetrics().density;
}
设置全屏
public static void setFullScreen(@NonNull final Activity activity) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
                | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
设置竖屏
public static void setLandscape(@NonNull final Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
设置横屏
public static void setPortrait(@NonNull final Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
是否竖屏
public static boolean isLandscape() {
        return Utils.getApp().getResources().getConfiguration().orientation
                == Configuration.ORIENTATION_LANDSCAPE;
}
是否横屏
public static boolean isPortrait() {
        return Utils.getApp().getResources().getConfiguration().orientation
                == Configuration.ORIENTATION_PORTRAIT;
    }
截取屏幕
public static Bitmap screenShot(@NonNull final Activity activity, boolean isDeleteStatusBar) {
        View decorView = activity.getWindow().getDecorView();
        decorView.setDrawingCacheEnabled(true);
        decorView.buildDrawingCache();
        Bitmap bmp = decorView.getDrawingCache();
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        Bitmap ret;
        if (isDeleteStatusBar) {
            Resources resources = activity.getResources();
            int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
            int statusBarHeight = resources.getDimensionPixelSize(resourceId);
            ret = Bitmap.createBitmap(
                    bmp,
                    0,
                    statusBarHeight,
                    dm.widthPixels,
                    dm.heightPixels - statusBarHeight
            );
        } else {
            ret = Bitmap.createBitmap(bmp, 0, 0, dm.widthPixels, dm.heightPixels);
        }
        decorView.destroyDrawingCache();
        return ret;
}
是否锁屏
public static boolean isScreenLock() {
        KeyguardManager km =
                (KeyguardManager) Utils.getApp().getSystemService(Context.KEYGUARD_SERVICE);
        return km != null && km.inKeyguardRestrictedInputMode();
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rockykou/article/details/79949406

Android实现横竖屏、全屏的几种方式

1.Android实现横竖屏的方式: ① 在xml文件里面进行设置。一个是在activity的theme里面进行设置横屏、竖屏   另一种:在清单文件的activity节点下进行设置 android...
  • shuai370982
  • shuai370982
  • 2017-02-23 22:37:51
  • 673

android 横竖屏切换属性和播放视频全屏切换

最近在做平板项目,需要用到横屏切换,现在把属性贴出来方便以后查看。通常我们的应用只会设计成横屏或者竖屏,锁定横屏或竖屏的方法是在manifest.xml文件中设定属性android:screenOri...
  • u013895206
  • u013895206
  • 2015-03-03 10:35:40
  • 4823

关于SurfaceView横竖屏切换显示问题

我们一般都会用SurfaceView做预览和播放,话不多说,直接上代码清单文件中设置好代码中实现onConfigurationChanged()方法 android:configChanges="o...
  • qq_33756493
  • qq_33756493
  • 2017-03-16 12:00:14
  • 1249

iOS Swift3.0实现视频播放横竖屏切换效果

iOS Swift3.0实现视频播放横竖屏切换效果
  • feng2qing
  • feng2qing
  • 2017-03-12 11:19:44
  • 2375

Android获取屏幕宽高、屏幕密度、手动计算view大小

1、ldpi、mdpi、hdpi、xhdpi、xxhdpi 2、计算屏幕密度 3、Android APP图标大小 4、获取状态栏高度private int getStatusBarHeight(...
  • YangStronger
  • YangStronger
  • 2016-11-18 14:28:29
  • 2128

Android实战技巧之十:获得屏幕物理尺寸、密度及分辨率

通过程序去了解硬件情况是一件十分有意思的事情。很早我就研究在WM6.5上获得屏幕物理尺寸,但一直没有成功。后来又想要在Android上有所突破,不过在今天之前得到的尺寸都不准确。虽然很多人认为没必要这...
  • lincyang
  • lincyang
  • 2015-01-13 21:00:22
  • 55316

iOS开发关于某页面横竖屏切换的坑

我们在使用模态视图的时候,如果需要再接下来的页面可以进行横竖屏切换,就必须注意一个大坑,我查遍了网络,各种方法用尽了,终于想到了解决方案。 需求:   当前页面必须横屏显示,不能竖屏显示,模态视图...
  • Iven_ma
  • Iven_ma
  • 2017-06-12 13:36:38
  • 844

判断屏幕横竖屏状态

//获取当前Activity的屏幕方向 int orientation = getRequestedOrientation(); if ...
  • sinat_35541927
  • sinat_35541927
  • 2016-10-13 10:04:00
  • 1260

C#获取屏幕和桌面大小(宽、高)

  • 2010年03月11日 17:03
  • 40KB
  • 下载

Android中获得屏幕宽高的实用方法

获得屏幕的宽度和高度有很多种方法 //1、通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); heigth = dm.heightP...
  • v2810769
  • v2810769
  • 2017-09-10 11:03:03
  • 1233
收藏助手
不良信息举报
您举报文章:Android开发之获取屏幕宽高、屏幕密度、截取屏幕、全屏、横竖屏切换-ScreentUtils
举报原因:
原因补充:

(最多只允许输入30个字)