Android实现一键开启自由窗口、分屏、画中画模式——分屏模式

转载请注明出处:https://blog.csdn.net/sunmmer123

Android实现一键开启自由窗口、分屏、画中画模式系列

通过上一篇博文,我们学习了一些多窗口模式的基本概念以及如何自定义入口开启自由窗口模式的知识
接着,我们学习一下分屏模式的知识点,我们如何利用原理,自定义入口一键开启进入分屏模式

分屏模式

多窗口模式的默认体验是分屏模式,在这种模式下,系统会从设备中间以横向或纵向方式划分系统界面。

  • 原生默认进入分屏入口是点击右下角的方块,进入任务管理器,长按一个App的标题栏,将其拖入屏幕的高亮区域,这个App就进入了分屏模式。看下效果图:
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》
  • 不同厂商手机系统入口被改了都不一样,有Android设备的小伙伴可自行体验一下

现在自定义入口,可一键开启分屏,先看下效果图:

  • 点击分屏按钮,进入分屏模式,并且目标页面/应用在不同窗口
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》

1、分屏模式与自由窗口模式的区别

这其实从效果图可以显而易见看出来了

  • 分屏只能根据设置的屏幕方向上下或者左右拖动分界线来调整窗口大小,并且方向定好不能改变,而自由窗口是可以随意拖动并且放大缩小的。
  • 分屏只提供两个 Activity 窗格来放置应用,但是自由窗口模式是支持多个的

2、如何配置对分屏的模式支持

首先想要支持分屏模式或者自由窗口模式都需要这样做

  • 项目构建时,build.gradle需要适配Android N,比如:
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》
  • 在AndroidManifest.xml中的或者标签下设置新的属性android:resizeableActivity=“true”,如果你不想你的应用能被分屏/自由模式,就设置为false,默认是true的。
  • 可以设置layout新属性,设置分屏/自由模式下的默认的尺寸、最小的尺寸
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》

3、如何一键开启分屏模式

如同开启FreeFrom模式一样,通过反射的方法设置ActivityOptions来控制启动的Task的栈边界的大小,分屏模式下窗口里面的Activity所处的栈ID是DOCKED_STACK_ID。

  • 先设置setDockCreateMode:对应的意思是设置屏后显示的位置 ,分别有这几种位置:
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》
  • 然后设置setLaunchStackId,分屏模式下窗口里面的Activity所处的栈ID是DOCKED_STACK_ID,也就是3。
  • 所以整体设置代码如下:
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》
  • 最后和开启自由窗口模式一样启动应用/页面就可以了
    《Android实现一键开启自由窗口、分屏、画中画模式——分屏模式》

其实多窗口框架的核心思想也就是分栈和设置栈边界,不管我们是开启自由窗口模式还是分屏模式,重要的点都是通过setLaunchStackId设置对应栈ID,不同的Activity可能归属于不同的Stack,但是具有相同的Stack ID。
具体的从系统源码角度分析分栈以及设置栈边界的步骤和原理,可以通过这篇博客学习:Android 多窗口框架全解析

在分屏模式里还有一个很好的知识点:支持拖放,也就是说当两个 activity 共享屏幕时,用户可在二者之间拖放数据。
后续有时间我会继续补上

至此,关于分屏的知识点以及如何开启就说到这,我们接下去,来看看画中画模式的相关内容

    原文作者:W_D_T
    原文地址: https://blog.csdn.net/sunmmer123/article/details/118358457
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞