Android 获取屏幕方向,根据屏幕旋转角度判断屏幕实际方向

在使用 getResources().getConfiguration().orientation 获取屏幕方向时,可能会遇到不准确的问题。
这是因为该方法返回的是设备的自然方向,而不是屏幕的实际方向。

在某些情况下,设备的自然方向可能与屏幕的实际方向不同。例如,如果设备是横向放置的,但屏幕是纵向显示的,那么设备的自然方向将是横向,但屏幕的实际方向将是纵向。

要获取屏幕的实际方向,可以使用 getWindowManager().getDefaultDisplay().getRotation() 方法。该方法返回当前屏幕的旋转角度,可以通过判断旋转角度来确定屏幕的实际方向。

这个方法不准确(Configuration):

    public static boolean isLandscrape() {
   
        // 判断Android当前的屏幕是横屏还是竖屏。横竖屏判断
        if (BaseApplication.getApplication().getResources().getConfiguration().orientation
                == Configuration.ORIENTATION_PORTRAIT) {
   
            //竖屏
            return false;
        } else {
   
            //横屏
            return true;
        }
    }

推荐使用下面的方法:

public static boolean isLandscrape() {
   
        WindowManager windowManager = (WindowManager) BaseApplication.getApplication().getSystemService(WINDOW_SERVICE);
        int rotation = windowManager.getDefaultDisplay().getRotation();
        int orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

        boolean isLandscape;// 是横屏

        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
   
            // 设备的自然方向是纵向
            if (rotation == Surface.ROTATION_0) {
   
                // 屏幕的实际方向也是纵向
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                isLandscape = false;
            } else {
   
                // 屏幕的实际方向是横向
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                isLandscape = true;
            }
        } else {
   
            // 设备的自然方向是横向
            if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
   
                // 屏幕的实际方向也是横向
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                isLandscape = true;
            } else {
   
                // 屏幕的实际方向是纵向
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                isLandscape = false;
            }
        }
//        setRequestedOrientation(orientation);// 设置屏幕方向
        return isLandscape;
    }

相关推荐

  1. Android】App 屏幕适配方案

    2023-12-07 20:48:03       20 阅读
  2. Android13屏幕旋转的基本逻辑

    2023-12-07 20:48:03       13 阅读
  3. python实现屏幕颜色获取

    2023-12-07 20:48:03       34 阅读
  4. android QtScrcpy 共享屏幕 获取本地Address

    2023-12-07 20:48:03       12 阅读
  5. Android 手机屏幕适配方式和原理

    2023-12-07 20:48:03       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 20:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 20:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 20:48:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 20:48:03       20 阅读

热门阅读

  1. 高效的单行python脚本

    2023-12-07 20:48:03       39 阅读
  2. Pytorch---实现神经网络模型在GPU上进行训练

    2023-12-07 20:48:03       39 阅读
  3. Android 记录一些Framework开发的命令

    2023-12-07 20:48:03       31 阅读
  4. Linux /etc/hosts文件

    2023-12-07 20:48:03       38 阅读
  5. pip的基本命令和使用:程序猿的必备技能

    2023-12-07 20:48:03       34 阅读
  6. Node.js之path路径模块

    2023-12-07 20:48:03       36 阅读
  7. 浅谈对ASP.NET MVC(微软Web开发框架)的理解

    2023-12-07 20:48:03       38 阅读