支持和禁止分屏功能
android:resizeableActivity="true|false" 通过AndroidManifest中进行配置,来支持或者禁止分屏功能
监听是否进入分屏模式
重写Activity或者FragmentActivity的onMultiWindowModeChanged方法
@Override
public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
super.onMultiWindowModeChanged(isInMultiWindowMode);
Log.e("gex", "onMultiWindowModeChanged()");
}
生命周期
如果不做任何处理, Activity会销毁重新创建,生命周期如下:
05-25 13:42:50.964 23603-23603/com.gx.lottie E/gex: onMultiWindowModeChanged()
05-25 13:42:51.002 23603-23603/com.gx.lottie E/gex: onDestroy()
05-25 13:42:51.131 23603-23603/com.gx.lottie E/gex: onCreate()
05-25 13:42:51.133 23603-23603/com.gx.lottie E/gex: onStart()
05-25 13:42:51.141 23603-23603/com.gx.lottie E/gex: onResume()
05-25 13:42:51.156 23603-23603/com.gx.lottie E/gex: onPause()
如果想禁止Activity销毁重建,则需要对Activity的configChanges进行如下的配置:
android:configChanges="screenLayout|screenSize|smallestScreenSize|orientation"
配置过之后,进入分屏模式后生命周期的变化如下:
05-25 13:46:55.201 23806-23806/com.gx.lottie E/gex: onMultiWindowModeChanged()
05-25 13:46:55.263 23806-23806/com.gx.lottie E/gex: onRestart()
05-25 13:46:55.264 23806-23806/com.gx.lottie E/gex: onStart()
05-25 13:46:55.284 23806-23806/com.gx.lottie E/gex: onResume()
05-25 13:46:55.349 23806-23806/com.gx.lottie E/gex: onPause()
特殊情况处理,比如视频播放
进入分屏模式后,两个窗口只有一个会处于onResume的状态,所以如果有视频播放的需求,建议在onStart和onPause方法里边做相关的播放和暂停处理
Activity跳转
如果分屏之后,想跳转进入的目标Activity展示在另一半的屏幕中,则需要设置以下Flag:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
效果如下:
11111.png
222222.png