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

栏目: IT技术 · 发布时间: 4年前

内容简介:了 2 个多月了。前期一直处于封禁状态,随着疫情的好转,现在已经可以出去吃碗热干面了。

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

一、序大家好,我是承香墨影。不瞒大家说,我已经在湖北待

了 2 个多月了。

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

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

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

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

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

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

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

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

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

二、Android 的分屏模式

2.1 什么是多窗口模式

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

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

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

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

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

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); 

实际效果如下:

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

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

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

2.4 支持分屏

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

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

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

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

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

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

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

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

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

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

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

三、小结时刻

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

最后简单小结一下:

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

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

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

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

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

【本文为51CTO专栏作者“张旸”的原创稿件,转载请通过微信公众号联系作者获取授权】

戳这里,看该作者更多好文


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

"笨办法"学Python

"笨办法"学Python

肖 (Zed A.Shaw) / 王巍巍 / 人民邮电出版社 / 2014-11-1 / CNY 49.00

本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。 本书结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数三个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测......一起来看看 《"笨办法"学Python》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具