V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  Android

Android 怎么获取 Activity 横竖屏?我暂没找到靠谱 api

  •  
  •   nnegier · 2022-09-15 23:53:38 +08:00 · 8500 次点击
    这是一个创建于 801 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先我不能用只要一个 Context 就行的,ctx.getResources().getConfiguration().orientation ,这种不行,有一点点滞后,尤其是横竖屏跳界面切换的时候,实测,这个 pass 。
    OrientationEventListener 这个也不要,pass 。

    希望是能在 Activity 生命周期方法里同步能获取到的。

    Activity 的 getRequestedOrientation()方法对于 xml 中写死的 landscape 和 portrait 可行,但是未指定的那种就不行了。
    我想除此之外,我可不可以通过横竖屏的宽高比来判断是横屏还是竖屏,如果宽大于高是横屏反之是竖屏?

    实属困惑,特来求教。
    5 条回复    2022-09-19 19:13:19 +08:00
    dntilee
        1
    dntilee  
       2022-09-16 01:13:22 +08:00
    首次用 context.getResources().getConfiguration().orientation ,之后用 onConfigurationChanged 监听吧。
    横竖屏宽高比,在部分折叠屏上会有问题
    xmai
        2
    xmai  
       2022-09-16 10:02:51 +08:00
    int rotation = getWindowManager().getDefaultDisplay().getRotation();
    WindowManager#getDefaultDisplay 在 API 30 中已弃用用于获取关联显示的方法 WindowManager 。此方法的用法应替换为 DisplayManager#getDisplay().
    请注意,文档建议使用 Context#getDisplayAPI 30+,但 DisplayManagerAPI 为 API 17+ 提供相同的功能。
    nnegier
        3
    nnegier  
    OP
       2022-09-16 13:14:53 +08:00
    @xmai 意思就是这个可行,在 API17+上,真是太感谢了,开始准备尝试
    nnegier
        4
    nnegier  
    OP
       2022-09-16 20:13:13 +08:00
    @xmai 更正这个对于我而言也不太靠谱,另外这个 API 获取的宽高也不太靠谱,尤其是我锁屏时 adb install apk 后台跑起来时。因为它也是全局的,不是仅针对某一个应用的状态。
    Helsing
        5
    Helsing  
       2022-09-19 19:13:19 +08:00 via iPhone
    重写 onConfigurationChange 方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1301 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:29 · PVG 01:29 · LAX 09:29 · JFK 12:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.