浅谈 Android 7.0 多窗口分屏模式的实现
从Android7.0开始,Google推出了一个名为“多窗口模式”的新功能,也就是我们常说的“分屏模式”。那么,这个功能有什么用呢?作为开发者,我们又能做些什么?
Android7.0添加了对同时显示多个APP的支持。在手持设备上,两个APP可以在分屏模式下并排运行。
嗯,大概就是这样:
分屏模式的适配
我们如何才能让自己的APP支持分屏模式呢?
若项目的 targetSDKVersion大于等于24,那么可以在 AndroidManifest.xml文件的 Application或 Activity节点通过设置 android:resizeableActivity=["true"|"false"]来控制整个APP或某个Activity是否支持分屏。该属性的默认值是 true,也就是说,如果不设置该属性,在支持分屏的设备上,默认是可以分屏的。
若项目的 targetSDKVersion小于24,那么运行在支持分屏的设备上,默认可以分屏。这时如果需要禁止分屏,需要在 AndroidManifest.xml文件的 Application或 Activity节点设置 android:screenOrientation属性来控制整个APP或某个Activity的屏幕方向,从而控制整个APP或某个Activity禁止分屏。
分屏模式的监听
能不能在代码中监听APP是否进入分屏模式呢?答案是能。由于APP在分屏模式发生改变时会执行 onMultiWindowModeChanged方法,因此我们在Activity中重写这个方法就可以实现分屏的监听了。
@Override publicvoidonMultiWindowModeChanged(booleanisInMultiWindowMode){ 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.xml的 Activity节点设置以下属性:
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
设置了这个属性,在进入分屏模式时,Activity就不会自动重建了。
分屏模式的判断
我们可以通过Activity的 isInMultiWindowMode()方法获取当前是否进入分屏模式,该方法返回 true表示当前已进入分屏模式,返回 false则表示当前未进入分屏模式。
if(isInMultiWindowMode()){ //已进入分屏模式 }else{ //未进入分屏模式 }
分屏模式下打开Activity
如果APP在分屏模式下打开Activity时,为Intent设置了 Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT和 Intent.FLAG_ACTIVITY_NEW_TASK标志,那么新打开的Activity将显示在当前APP的另一侧。例如下面的代码:
Intentintent=newIntent(this,NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
如图,原始Activity分屏后显示在屏幕上半部分,新打开的Activity显示在原始Activity下方(屏幕的下半部分)。
到此这篇关于浅谈Android7.0多窗口分屏模式的实现的文章就介绍到这了,更多相关Android7.0多窗口分屏内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!