小窗口/分屏模式

小窗口/分屏模式目前使用小窗口模式的可能会比较多 就我个人而言 我也经常使用小窗口模式 真的是方便 不用来回切换两个应用 所以适配方面 还是推荐进行适配的

大家好,欢迎来到IT知识分享网。

小窗口/分屏模式

首先来看看什么是小窗口模式,如下图:

在这里插入图片描述

  目前使用小窗口模式的可能会比较多,就我个人而言,我也经常使用小窗口模式,真的是方便,不用来回切换两个应用,所以适配方面,还是推荐进行适配的。

判断当前是否处于小窗口模式/分屏模式

// 是否是小屏/分屏模式 public static boolean isInMultiWindowMode(Context context) { if (RomUtils.isOppo()) return isInMultiWindowModeCheckOppo(context); else { boolean isInMultiWindowMode = false; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (context instanceof Activity) { return ((Activity) context).isInMultiWindowMode(); } } return false; } } private static boolean isInMultiWindowModeCheckOppo(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { ///获取App界面宽高 WindowManager localWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowMetrics currentWindowMetrics = localWindowManager.getCurrentWindowMetrics(); int height = currentWindowMetrics.getBounds().height(); int width = currentWindowMetrics.getBounds().width(); L.i("app check window width: " + width + " height: " + height); ///获取屏幕宽高 Display display = context.getDisplay(); if (display != null) { int physicalHeight = context.getDisplay().getMode().getPhysicalHeight(); int physicalWidth = context.getDisplay().getMode().getPhysicalWidth(); L.i("app check window physicalWidth: " + physicalWidth + " physicalWidth: " + physicalHeight); return width != physicalWidth || height != physicalHeight; } } return false; } 

经实测:oppo的小窗口模式还是会返回false,只有分屏模式才会返回true,小米/华为/vivo的小窗口模式/分屏模式均返回true。问了oppo技术支持,oppo这边只能通过判断宽高尺寸来区分出小窗口/分屏模式。

界面适配

android:resizeableActivity="false" // 系统默认为true 
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout" 
小窗口模式需要注意: 华为: activity.isInMultiWindowMode小窗口模式返回true 切换小窗口模式不会调用onConfigurationChanged,会调用onResume 小窗口模式顶部有个状态栏,布局内容在状态栏下 小窗口模式底部没有操作栏 vivo: activity.isInMultiWindowMode小窗口模式返回true 切换小窗口模式会调用onConfigurationChanged,不会调用onResume 小窗口模式顶部有个状态栏,状态栏覆盖在布局内容上 小窗口模式底部没有操作栏 oppo: activity.isInMultiWindowMode小窗口模式返回false (问了技术支持,只能通过宽高尺寸来判断) 切换小窗口模式会调用onConfigurationChanged,不会调用onResume 小窗口模式顶部有个状态栏,状态栏覆盖在布局内容上 小窗口模式底部没有操作栏 小米: activity.isInMultiWindowMode小窗口模式返回true 切换小窗口模式会调用onConfigurationChanged,不会调用onResume 小窗口模式顶部有个状态栏,状态栏覆盖在布局内容上 小窗口模式底部有个操作栏 小窗口模式PopupWindow的showAsDropDown展示的位置异常,只能使用showAtLocation 状态栏高度读取异常:切换小窗口模式切换回来后,状态栏高度读取到的值变小了 105->98 底部导航栏高度读取异常:小窗口模式,一开始读取到130,跳转别的页面后回退读取到142 三星: 直接放弃...和国内的厂商不同,国内的宽高比是固定的,而三星可以随意修改小窗口的宽高,导致适配....无解,这种适配起来,就复杂多了,需要每次切换了大小就重新计算布局。 

  由于切换模式会回调其中一个生命周期(onConfigurationChanged/onResume),所以可以在回调的地方进行布局调整,适配界面直到能完整展示全部UI。目前来说,小米的适配是麻烦多了,和其它厂商差别会比较大,所以不能统一适配。

弹窗Dialog/PopupWindow注意

完结

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125204.html

(0)
上一篇 2025-09-29 16:15
下一篇 2025-09-29 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信