浅谈 Android 7.0 多窗口分屏模式

作者: 古舟咕咕 | 来源:发表于2020-03-25 06:02 被阅读0次

    从 Android 7.0 开始,Google 推出了一个名为“多窗口模式”的新功能,也就是我们常说的“分屏模式”。那么,这个功能有什么用呢?作为开发者,我们又能做些什么?

    Android 7.0 添加了对同时显示多个 APP 的支持。在手持设备上,两个 APP 可以在分屏模式下并排运行。

    嗯,大概就是这样:


    分屏模式的适配

    我们如何才能让自己的 APP 支持分屏模式呢?
    若项目的targetSDKVersion大于等于24,那么可以在AndroidManifest.xml文件的ApplicationActivity节点通过设置android:resizeableActivity=["true" | "false"]来控制整个 APP 或某个 Activity 是否支持分屏。该属性的默认值是true,也就是说,如果不设置该属性,在支持分屏的设备上,默认是可以分屏的。
    若项目的targetSDKVersion小于24,那么运行在支持分屏的设备上,默认可以分屏。这时如果需要禁止分屏,需要在AndroidManifest.xml文件的ApplicationActivity节点设置android:screenOrientation属性来控制整个 APP 或 某个 Activity 的屏幕方向,从而控制整个 APP 或某个 Activity 禁止分屏。

    分屏模式的监听

    能不能在代码中监听 APP 是否进入分屏模式呢?答案是能。由于 APP 在分屏模式发生改变时会执行onMultiWindowModeChanged方法,因此我们在 Activity 中重写这个方法就可以实现分屏的监听了。

     @Override
      public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
        super.onMultiWindowModeChanged(isInMultiWindowMode);
        // 判断当前是否为分屏模式
        if (isInMultiWindowMode) {
          // 已进入分屏模式
        } else {
          // 未进入分屏模式
        }
      }
    

    分屏模式下的生命周期

    需要注意的是:进入和退出分屏模式时,Activity 的生命周期。
    进入分屏模式时,Activity 的生命周期:

    onPause()->onStop()->onMultiWindowModeChanged()->onDestroy()->onCreate()->onStart()->onResume()->onPause()
    

    退出分屏模式时,Activity 的生命周期:

    onStop()->onDestroy()->onCreate()->onStart()->onResume()->onPause()->onMultiWindowModeChanged()->onResume()
    

    可以看出,在进入分屏模式时,Activity 先执行onMultiWindowModeChanged方法,再重建自己。在退出分屏模式时,Activity 先重建自己,再执行onMultiWindowModeChanged方法。

    这样呢会有一个问题,我们的 APP 进入分屏模式时,在onMultiWindowModeChanged方法中如果有对 UI 等的操作,经过之后的自动重建就没有效果了。为了防止这种情况,需要在AndroidManifest.xmlActivity节点设置以下属性:

    android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
    

    设置了这个属性,在进入分屏模式时,Activity 就不会自动重建了。

    分屏模式的判断

    我们可以通过 Activity 的isInMultiWindowMode()方法获取当前是否进入分屏模式,该方法返回true表示当前已进入分屏模式,返回false则表示当前未进入分屏模式。

      if (isInMultiWindowMode()) {
        // 已进入分屏模式
      } else {
        // 未进入分屏模式
      }
    

    分屏模式下打开 Activity

    如果 APP 在分屏模式下打开 Activity 时,为 Intent 设置了Intent.FLAG_ACTIVITY_LAUNCH_ADJACENTIntent.FLAG_ACTIVITY_NEW_TASK标志,那么新打开的 Activity 将显示在当前 APP 的另一侧。例如下面的代码:

      Intent intent = new Intent(this, NewActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK);
      startActivity(intent);
    

    如图,原始 Activity 分屏后显示在屏幕上半部分,新打开的 Activity 显示在原始 Activity 下方(屏幕的下半部分)。

    相关文章

      网友评论

        本文标题:浅谈 Android 7.0 多窗口分屏模式

        本文链接:https://www.haomeiwen.com/subject/horgdhtx.html