当前位置: 首页 > article >正文

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;
    }

http://www.kler.cn/news/156785.html

相关文章:

  • iOS代码混淆工具
  • css 修改滚动条样式,解决Windows浏览器中滚动条不美观问题
  • 分治—快速选择算法
  • Linux DataEase数据可视化分析工具本地部署与远程访问
  • 物流实时数仓ODS层——Mysql到Kafka
  • SpringBoot第56讲:SpringBoot集成文件 - 集成EasyExcel之Excel导入导出
  • 学嵌入式,已经会用stm32做各种小东西了,下一步是什么
  • 【预测工具】不须编码的预测和数据可视化工具
  • React自定义Hook之useModel hook
  • 图帕斯TruPulse激光测距仪测高仪维修TP360B TP200
  • 陪玩行业引流不再成难题?“他”到底是怎么做到的
  • 认识Docker
  • Jvm常见问题
  • AI聊天 AI绘画 AI视频 AI制作PPT
  • [Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)
  • 鸿蒙学习之TypeScript 语法理解笔记
  • LightDB to_char 三入参函数支持
  • 吉祥物虚拟人IP:如何持续为品牌年轻化营销赋能
  • 面试篇:算法(二:二叉树)
  • 信而泰IPSec测试方法
  • 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
  • vs查找与替换功能【在文件中查找】不显示任何结果
  • 【objectarx.net】加载线型文件
  • golang 解决ZWNBSP 空字符问题
  • 【Docker】Swarm的ingress网络
  • 绿色建筑革新,气膜球馆成为城市锻炼新热点
  • Python 流程控制
  • HTML5+CSS3+Vue小实例:浪漫的心形文字动画特效
  • FFmpeg在Centos服务器上离线安装(包含所需依赖)并实现拉取rtsp流与推送至rtmp服务器
  • c++学习第四讲---函数提高