Android 多窗口适配主要是针对支持分屏、自由形态窗口、画中画等多个窗口模式的 Android 设备。

以下是 Android 多窗口适配的一些常见技术点:

  1. 支持多窗口:在 AndroidManifest.xml 文件中通过 <activity>resizeableActivity 属性来表明是否支持多窗口模式,设为 true 即可。同时,还可以通过 android:configChanges 属性来处理多窗口模式下的配置变化。

  2. 布局管理:在多窗口模式下,通常需要根据窗口大小和布局等因素动态调整界面布局。可以使用 Android 提供的布局管理器或者手动编写代码来完成界面布局的适配。

  3. 窗口生命周期:多窗口模式下,每个窗口都有其独立的生命周期,并且可能会因为其它原因而被系统销毁和重新创建。应用程序应该正确地处理窗口的生命周期,如保存数据、释放资源等。

  4. 功能适配:应用程序的某些功能(如通知、悬浮窗、拍照等)可能需要根据多窗口模式进行相应的适配。例如,在画中画模式下,可能需要隐藏某些控件或调整某些元素的位置和大小。

总之,在进行多窗口适配时,需要认真分析多窗口模式下的用户场景和使用习惯,并对应用程序进行全面适配,以提供更好的用户体验。

多窗口属性 resizeableActivity

  • application标签下可设置全局
  • activity标签下可设置单个activity
<applicationandroid:name=".MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:resizeableActivity="true"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".MyActivity"android:label="@string/app_label"android:launchMode="singleTask"android:screenOrientation="portrait"android:resizeableActivity="true"/>
</application>

这个属性的设置会导致三种情况:
① 如果不声明这个属性,那么默认允许进入多窗口模式,但是会有上面图片的提示(第一次运行的时候)
② 如果声明了这个属性,并设置值为true,那么允许进入多窗口模式,并且不会提示
③ 如果声明了这个属性,并设置值为false,那么不允许进入多窗口模式,只允许全屏显示

窗口变化属性 configChanges

android:configChanges 是 AndroidManifest.xml 文件中的标签的一个属性,定义了一个 Activity 何时需要处理配置更改(configuration changes)事件,而不是被系统销毁并重新创建。

android:configChanges="keyboardHidden|orientation|screenSize|mcc|mnc|keyboard|navigation|uiMode"

通常情况下,当设备配置信息改变时(例如横屏或竖屏切换、语言或键盘布局的改变等),Android 会销毁当前 Activity 并重新创建一个新的 Activity 实例。这样做的目的是为了确保 Activity 可以适应不同的配置环境,但同时也会影响 App 的性能和用户体验。而通过设置 android:configChanges 属性,可以告诉 Android 系统在特定条件下不要销毁当前 Activity,而是让 Activity 调用 onConfigurationChanged() 方法来处理配置变更事件。

常见的参数如下:

  • mcc: 移动国家代码 (MCC) 改变
  • mnc: 移动网络代码 (MNC) 改变
  • locale: 系统语言环境改变
  • touchscreen: 触摸屏幕类型改变
  • keyboard: 键盘类型改变
  • keyboardHidden: 键盘可见性改变
  • navigation: 设备导航方式改变
  • orientation: 设备方向改变
  • screenLayout: 手机屏幕布局改变,如在 HDMI 连接器上连接到电视会改变当前屏幕大小和 DPI。
  • uiMode: 系统 UI 模式改变,如手机插上键盘、进入或退出 Car Mode 模式等
  • screenSize: 屏幕尺寸改变,如切换到平板模式
  • smallestScreenSize: 最小尺寸屏幕改变 (支持 API level 13 及以后的版本)

使用 android:configChanges 属性需要注意以下几点:

  1. 必须在 AndroidManifest.xml 中声明该属性,并指定所需的配置变化类型。

  2. 当使用该属性时,应该尽量避免依赖于 Activity 生命周期里的事件,如 onResume() 和 onPause()。

  3. 如果在 onConfigurationChanged() 中修改了布局或资源文件等,则需要手动重新加载相应的资源以使其生效。

总之,在合适的情况下使用 android:configChanges 可以提高 App 的性能和用户体验,但要注意对不同的配置变化进行准确的处理。

Android 多窗口适配相关推荐

  1. 【Android折叠屏适配】基于AutoSize框架适配折叠屏并兼容多窗口模式

    [Android折叠屏适配]基于AutoSize框架适配折叠屏并兼容多窗口模式 问题背景 当前最新的Android API 33对大屏设备的支持已较为完善,结合Jetpack Compose等响应式布 ...

  2. Android N7.0多窗口适配开发指导

    0 前言背景 本文档为多窗口适配指导文档.当前仅重点介绍有关分屏(split-screen)的相关说明,后续逐步补充其他模式的说明. 使用对象 使用Android平台的研发人员和测试人员等. 适用范围 ...

  3. Android刘海屏适配全方案(华为、小米、Vivo、Oppo)

    前言 目前市面上的刘海屏和水滴屏手机越来越多了,颜值方面是因人而异,有的人觉得很好看,也有人觉得丑爆了,我个人觉得是还可以.但是作为移动开发者来说,这并不是一件好事,越来越多异形屏手机的出现意味着我们 ...

  4. android – 多屏幕适配相关

    android – 多屏幕适配相关 作者: 曲天日期: 2011/10/27 1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).a ...

  5. Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了

    机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/10399339 ...

  6. Android P 和 Android Q的适配

    Android P non-sdk 接口限制 对非 SDK 接口的处理是 API 抽象化的实现细节 官方链接 https://developer.android.google.cn/reference ...

  7. Android 浅谈适配全面屏、刘海屏、水滴屏

    对刘海屏.水滴屏做适配前,先在此给出一个基本概念:何谓刘海屏?何谓水滴屏? 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖. 目前国内流行的手机厂商主要有:vivo ...

  8. Android刘海屏适配精炼详解

    一.前期基础知识储备 话不多说,这么多刘海屏手机今年集中爆发,所以尽管刘海屏不好看,但是还是要适配. 2017年苹果X开启了刘海屏时代,2018年集中爆发,纷纷采取刘海屏这一策略来实现全面屏的概念(看 ...

  9. android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...

    兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...

最新文章

  1. 机械硬盘4k读写速度_有容乃大,18T企业级机械硬盘旗舰—希捷银河Exos X18测试...
  2. vue 集成html5 plus - 懒懒de尐彪 - 博客园
  3. 作者:宋长青,山东农业大学教授,农业大数据研究中心常务副主任。
  4. swift UI专项训练15 PcikerView老虎机视图
  5. 解决树莓派的gpio口不能读取ds18b20的设备文件
  6. 戴尔携手EMC战略合作续签至2013年
  7. Xshell 官网免费版下载
  8. Git小乌龟分支操作
  9. Science fiction list
  10. 未能加载文件或程序集“XXXX”或它的某一个依赖项。试图加载格式不正确的程序。(已解决)
  11. 你想知道的全都有 五一节日购机全攻略
  12. Linux下安装新世纪五笔输入法(附表)(for 小白)
  13. 网易易盾js逆向分析
  14. input标签绑定click事件无反应
  15. 不经意传输协议快速入门
  16. AForge学习笔记(2):AForge.Controls
  17. Android Studio 启动问题(does not point to a valid jvm installation)
  18. java 字符串转list_浅谈java 字符串,字符数组,list间的转化
  19. 【C语言】链表太难学不懂?看这一篇就够了
  20. Servlet系列学习笔记1 --- Servlet工作原理和生命周期

热门文章

  1. linux下的文件搜索功能
  2. java帮助文档在哪
  3. vue3表格双击事件
  4. 绘制图像灰度直方图——将图像的灰度分布可视化方法总结
  5. 单片机应用编程技巧100问
  6. arch模型的思路_ARCH模型是什么?
  7. 卡尔曼滤波模型及Matlab模型建立
  8. Java并发编程之Exchanger
  9. PM Q7声卡使用教程
  10. 使用狸窝全能视频转换器实现给视频添加水印