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

在使用 getResources().getConfiguration().orientation 获取屏幕方向时,可能会遇到不准确的问题。

这是因为该方法返回的是设备的自然方向,而不是屏幕的实际方向。

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

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

这个方法不准确(Configuration):

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

推荐使用下面的方法:

css 复制代码
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;
    }
相关推荐
朱涛的自习室4 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
应用市场10 小时前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
一铭1119911 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
geats人山人海12 小时前
java 7异常
android·java·开发语言
2601_9620710013 小时前
Kimi K3 vs DeepSeek V4-Pro实测对比:2026年同一入口十道题,耗时与token消耗差在哪
android·java·数据库
右手吉他14 小时前
高通平台IA APN问题分析之二
android·物联网
夜雪一千14 小时前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
不浪费一个字节15 小时前
一个纯 Python 实现的 APK 解析与设备操控工具箱
android
itmigrate15 小时前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php
hai_android15 小时前
LiveEventBusCore 跨 Activity 通讯源码解析
android·kotlin·android jetpack