10

不瞒大家,我在湖北的这 2 个月,体验了 Android 的这个功能,真香!

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIxNjc0ODExMA%3D%3D&%3Bmid=2247486713&%3Bidx=1&%3Bsn=a10552b768e9b5c9d9aed0c81c2d7c71
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
NbQNFv2.jpg!web

meimmeJ.jpg!web

一、序

大家好,我是承香墨影。不瞒大家说,我已经在湖北待了 2 个多月了。

前期一直处于封禁状态,随着疫情的好转,现在已经可以出去吃碗热干面了。

在家远程办公的这段时间,除了正常的工作学习之外,精神娱乐也少不了,肉身和空间上的限制,也无法阻碍对精神世界的追求。但无论怎么玩出了花样,多数时候还是脱离不了手机这个小小的屏幕。

最近我深度体验了 Android 中的一个功能,一个以前让我嗤之以鼻,觉得没有任何大用的功能,最近深度体验之后,发现真香。

这个功能就是 Android 的分屏功能 。在家的这段时间,发现大概只有手机的屏幕,才是自己能够独享的。

虽然 App 之间的切换,已经可以做到非常的顺畅,但是如果你在刷剧的时候还要切到微信回复消息,之后再切回来,这样的体验无疑是非常差的。还别说有时候我无法忍受剧情的拖沓,总想着看着剧的同时再干点什么,例如刷个淘宝京东什么的。

这种需求,分屏模式就可以满足。

2m2u6fb.png!web

上图中就是我比较常用的 2 个场景,刷剧和游戏之余,还想干点别的,例如聊天、购物等等。

那我们今天就来聊聊 Android 的多窗口模式,以及使用它需要注意的一些点。另外有些 App 禁用了多窗口模式,但是依然有办法强制多窗口,我们一起来聊聊。

二、Android 的分屏模式

2.1 什么是多窗口模式

Android 从 N( 7.0,API Level 24 ) 开始支持多窗口模式,或者叫分屏模式,即允许在屏幕上同时打开多个 App,同时显示多个窗口。

近几年的新手机,应该都是紧跟最新的系统,7.0 的发布也有好几年了,我想大家应该都可以享受到。

vqqqqqZ.png!web

其实分屏模式使用起来很简单,在最近打开任务窗口( Overview Screen )中,可以长按 App,选择进入分屏模式。

euM32uA.gif

2.2 分屏的生命周期

分屏模式支持同时打开 2 个 App 或者打开某个 App 的 2 个页面,当然这需要特殊的技巧,后面会说到。

说回到生命周期,当切换分屏模式时,如果不做任何处理,Activity 会触发销毁再重建,这个过程相信大家应该比较熟悉,毕竟切换个屏幕方向,Activity 默认都会销毁重建。

如果想禁用 Activity 销毁重建,则配置 android:configChanges 属性即可。

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

分屏模式还增加了一个系统回调 onMultiWindowModeChanged(isInMultiWindowMode) 方法,可以通过它的参数 isInMultiWindowMode 参数判断多屏模式的进入和退出。

除此之外,如果想要主动判断当前是否处于分屏模式,可以通过 Activity 或 Fragment 的 inMultiWindow() 进行判断。

2.3 打开分屏的页面

默认情况下,同一个 App 的多个 Activity 会共用同一个窗口,且无法分配到不同的窗口中。

所以我们在分屏模式下,打开某个页面,实际上还是在当前窗口中打开,如果想让新页面被分配到不同的窗口中,可以通过给 Intent 设置 FLAG_ACTIVITY_LAUNCH_ADJACENT 标识来实现。

当处于分屏模式下时,通过该 Flag,新 Activity 就会在新的栈中被启动,以此实现 2 个 Activity 被放置在不同的窗口中。

Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

实际效果如下:

UfEVNvR.png!web

需要注意的是,该 Flag 随着 Android N 的支持,所以在使用时需要判断是否大于等于 Api Level 24。

另外我们也无需额外的判断是否处于分屏状态,如果当前不处于分屏状态,则该 Flag 的设置无效。

2.4 支持分屏

前面提到,分屏模式由 Android 7.0 引入。那么如果 targetSdkVersion 被设置为 N 及以上时,分屏是默认开启的,反之则是默认关闭。

分屏模式由 Application 的 android:resizeableActivity 属性控制, true 为开启, false 为关闭。我们可以通过这个属性,主动管理分屏模式。

这就把是否支持分屏模式的权限,交到了开发者手中,但是我作为一个使用者,我在分屏模式下,打开某个 App 时提示我不支持,其实是一个非常不好的体验。

例如今日头条,本身是不支持分屏模式的,当我们尝试以分屏模式打开它的时候,会以全屏模式打开 App,并且弹出一个 Toast 提示。

iimiymq.gif

这种体验肯定是非常差劲的,那么 我们有什么办法让 App 强制支持分屏模式呢?

这就需要借助「开发者模式」了,通过「开发者模式」下的 2 个开关,来强制让所有 App 都支持分屏模式,并且可以调整窗口大小。

uyuqmu7.png!web

需要注意的是,调整这 2 个开关,是需要 重启后才会生效 。同时这种强制的行为本身也是开发者预料之外的,所以如果出现一些小问题也是符合预期的。

当我们把 2 个开关打开后,所有的 App 都能够支持分屏模式,并且可以调整窗口大小。

Fryy6rR.gif

三、小结时刻

分屏这个功能就说到这里,其实对于开发者来说,多数时候我们并不需要特殊设置什么,当 targetSdkVersion 为 24 的时候,其实已经默认支持。当然如果我们想要针对分屏模式做一些功能,也有对应的 Api 支持。

最后简单小结一下:

1. 分屏模式在 Android N 开始是默认打开的,通常不需要做什么也可以适配;

2. 可以通过 onMultiWindowModeChanged() 监听多窗口模式的切换,也可以通过 inMultiWindow() 主动判断当前是否是多窗口模式;

3. 如果不想支持分屏模式,可以通过 android:resizeableActivity 来控制;

4. 如果想要强制全部 App 支持分屏模式,可以在「开发者模式」中设置,让所有 App 都强制支持分屏模式;

今天就到这里,本文对你有帮助嘛?欢迎 留言、转发、点好看,一键三连

热文推荐:

公众号后台回复成长『 成长 』,将会得到我准备的学习资料。

2muIrqA.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK