Android 多窗口适配

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

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

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

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

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

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

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

多窗口属性 resizeableActivity

  • application标签下可设置全局
  • activity标签下可设置单个activity
<application
        android: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">
        <activity
            android: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 的性能和用户体验,但要注意对不同的配置变化进行准确的处理。

猜你喜欢

转载自blog.csdn.net/weixin_44008788/article/details/123410456