Android N就是Android7.0,虽然没有用过Android N,但是公司要求适配Android N,主要需要适配分屏,我进行了一番探索。
当app切换/恢复分屏或画中画状态时,Activity会回调下面的方法:
@Override
public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
//切换到分屏状态
}
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode){
//切换到画中画
}
同时也可以通过Activity.isInMultiWindowMode()来判断当前是否处于分屏模式。
可以通过Activity.isInPictureInPictureMode()判断是否处于画中画模式。
需要注意的是:
1、activity处于分屏模式时,在Activity获取到的方向不是固定的,当使用getResources().getConfiguration().orientation获取屏幕方向时,如果分屏的宽度>高度则系统orientation值为横屏,宽度<高度orientation值为竖屏。。。。。。这是我发现的规律。
2、从普通模式调整到分屏模式时,或者,处于分屏模式动态调整分屏大小时,Activity也会重新onCreate,如果不想让Activity重建可以设置如下:
android:configChanges="screenSize|keyboardHidden|orientation|smallestScreenSize"
这样在分屏的大小调整后,会回调onConfigurationChanged方法。
2、无法获取输入法展示状态。通常情况下,我们通过布局变化来判断输入法是否显示,但是分屏模式下,并且手机竖屏状态时,app弹出输入法不会引起布局变化,也就是说键盘不会遮挡app。