android开发分享浅谈 Android 7.0 多窗口分屏模式的实现

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

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

android 7.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   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.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 的另一侧。例如下面的代码:

  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 多窗口分屏模式的实现的文章就介绍到这了,更多相关android7.0 多窗口分屏内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/898682.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐