Android 多窗口适配
Android 多窗口适配主要是针对支持分屏、自由形态窗口、画中画等多个窗口模式的 Android 设备。
以下是 Android 多窗口适配的一些常见技术点:
支持多窗口:在 AndroidManifest.xml 文件中通过
<activity>
的resizeableActivity
属性来表明是否支持多窗口模式,设为 true 即可。同时,还可以通过android:configChanges
属性来处理多窗口模式下的配置变化。布局管理:在多窗口模式下,通常需要根据窗口大小和布局等因素动态调整界面布局。可以使用 Android 提供的布局管理器或者手动编写代码来完成界面布局的适配。
窗口生命周期:多窗口模式下,每个窗口都有其独立的生命周期,并且可能会因为其它原因而被系统销毁和重新创建。应用程序应该正确地处理窗口的生命周期,如保存数据、释放资源等。
功能适配:应用程序的某些功能(如通知、悬浮窗、拍照等)可能需要根据多窗口模式进行相应的适配。例如,在画中画模式下,可能需要隐藏某些控件或调整某些元素的位置和大小。
总之,在进行多窗口适配时,需要认真分析多窗口模式下的用户场景和使用习惯,并对应用程序进行全面适配,以提供更好的用户体验。
多窗口属性 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
属性需要注意以下几点:
必须在
AndroidManifest.xml
中声明该属性,并指定所需的配置变化类型。当使用该属性时,应该尽量避免依赖于 Activity 生命周期里的事件,如 onResume() 和 onPause()。
如果在
onConfigurationChanged()
中修改了布局或资源文件等,则需要手动重新加载相应的资源以使其生效。
总之,在合适的情况下使用 android:configChanges
可以提高 App 的性能和用户体验,但要注意对不同的配置变化进行准确的处理。
Android 多窗口适配相关推荐
- 【Android折叠屏适配】基于AutoSize框架适配折叠屏并兼容多窗口模式
[Android折叠屏适配]基于AutoSize框架适配折叠屏并兼容多窗口模式 问题背景 当前最新的Android API 33对大屏设备的支持已较为完善,结合Jetpack Compose等响应式布 ...
- Android N7.0多窗口适配开发指导
0 前言背景 本文档为多窗口适配指导文档.当前仅重点介绍有关分屏(split-screen)的相关说明,后续逐步补充其他模式的说明. 使用对象 使用Android平台的研发人员和测试人员等. 适用范围 ...
- Android刘海屏适配全方案(华为、小米、Vivo、Oppo)
前言 目前市面上的刘海屏和水滴屏手机越来越多了,颜值方面是因人而异,有的人觉得很好看,也有人觉得丑爆了,我个人觉得是还可以.但是作为移动开发者来说,这并不是一件好事,越来越多异形屏手机的出现意味着我们 ...
- android – 多屏幕适配相关
android – 多屏幕适配相关 作者: 曲天日期: 2011/10/27 1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).a ...
- Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了
机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/10399339 ...
- Android P 和 Android Q的适配
Android P non-sdk 接口限制 对非 SDK 接口的处理是 API 抽象化的实现细节 官方链接 https://developer.android.google.cn/reference ...
- Android 浅谈适配全面屏、刘海屏、水滴屏
对刘海屏.水滴屏做适配前,先在此给出一个基本概念:何谓刘海屏?何谓水滴屏? 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖. 目前国内流行的手机厂商主要有:vivo ...
- Android刘海屏适配精炼详解
一.前期基础知识储备 话不多说,这么多刘海屏手机今年集中爆发,所以尽管刘海屏不好看,但是还是要适配. 2017年苹果X开启了刘海屏时代,2018年集中爆发,纷纷采取刘海屏这一策略来实现全面屏的概念(看 ...
- android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...
兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...
最新文章
- 机械硬盘4k读写速度_有容乃大,18T企业级机械硬盘旗舰—希捷银河Exos X18测试...
- vue 集成html5 plus - 懒懒de尐彪 - 博客园
- 作者:宋长青,山东农业大学教授,农业大数据研究中心常务副主任。
- swift UI专项训练15 PcikerView老虎机视图
- 解决树莓派的gpio口不能读取ds18b20的设备文件
- 戴尔携手EMC战略合作续签至2013年
- Xshell 官网免费版下载
- Git小乌龟分支操作
- Science fiction list
- 未能加载文件或程序集“XXXX”或它的某一个依赖项。试图加载格式不正确的程序。(已解决)
- 你想知道的全都有 五一节日购机全攻略
- Linux下安装新世纪五笔输入法(附表)(for 小白)
- 网易易盾js逆向分析
- input标签绑定click事件无反应
- 不经意传输协议快速入门
- AForge学习笔记(2):AForge.Controls
- Android Studio 启动问题(does not point to a valid jvm installation)
- java 字符串转list_浅谈java 字符串,字符数组,list间的转化
- 【C语言】链表太难学不懂?看这一篇就够了
- Servlet系列学习笔记1 --- Servlet工作原理和生命周期