记一下java使用WindowManager判断折叠屏

网上搜到的都是kt版,源码方法还是挂起函数,java调起来好麻烦,最后在官网api最下面的Extension functions里找到rxjava的方法

附上地址:WindowInfoTracker  |  Android Developers (google.cn)

依赖

implementation 'androidx.window:window-rxjava3:1.3.0'

然后是示例代码

WindowInfoTracker windowInfoTracker = WindowInfoTracker.getOrCreate(context);
//这里也可以使用windowLayoutInfoObservable获得Observable进行处理
WindowInfoTrackerRx.windowLayoutInfoFlowable(windowInfoTracker, context)
    .safeSubscribe(new BlockingBaseSubscriber<WindowLayoutInfo>() {
        @Override
        public void onNext(WindowLayoutInfo windowLayoutInfo) {
            List<DisplayFeature> list = windowLayoutInfo.getDisplayFeatures();
            if (list.isEmpty()){
                Log.d("DisplayFeature", "normal screen");//非折叠屏和折叠屏close状态
            }else {
                Log.d("DisplayFeature", "fold spread screen");//折叠屏展开状态
            }
        }

        @Override
        public void onError(Throwable t) {

        }
   });

### 如何在 Android 应用程序中检测和处理折叠屏设备 #### 使用 Jetpack WindowManager 检测屏幕状态 为了适应不同类型的可折叠设备,开发者可以借助 Jetpack 的 `WindowManager` 来获取当前窗口度量 (Current Window Metrics) 和可能的最大窗口度量 (Maximum Possible Window Metrics),从而判断设备是否处于展开或折叠状态[^2]。 ```kotlin val windowMetrics = windowManager.currentWindowMetrics // 获取当前可用的窗口大小 val currentBounds = windowMetrics.bounds Log.d("Foldable", "Current bounds: $currentBounds") // 如果需要比较最大可能的窗口尺寸,则使用 maximumWindowMetrics val maxMetrics = windowManager.maximumWindowMetrics val maxWidth = maxMetrics.bounds.width() val maxHeight = maxMetrics.bounds.height() if ((maxWidth >= 800 || maxHeight >= 800)) { Log.d("Foldable", "This might be a foldable device with large screen size.") } ``` #### 利用 ActivityEmbedding API 处理多窗格布局 对于支持双屏或多窗显示的应用来说,Activity Embedding 提供了一种有效的方式来管理多个活动之间的关系。通过配置合适的 XML 文件并设置相应的属性,可以让应用更好地适配各种形态的变化[^1]。 ```xml <activity-alias android:name=".MainActivityAlias" android:targetActivity=".MainActivity"> <meta-data android:name="android.support.window.embedding.MIN_HEIGHT" android:value="600dp"/> </activity-alias> ``` 当设备被打开成平板模式时,系统会自动调整界面以充分利用额外的空间;而当它合上变成手机形式时,又能够迅速切换回传统的竖直排列方式。 #### 考虑物理特性差异 值得注意的是,虽然所有的可折叠装置都具备一定的共通之处——比如都可以改变形状、角度等——但是具体到每一种型号还是存在很大区别的。因此,在编写代码之前应当充分理解目标平台的特点以及用户交互习惯上的区别[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值