Android N上fullscreen还原成freeform注意点

本文介绍在Android系统中如何通过更改应用所在的工作栈ID(stack ID)来实现从全屏模式到Freeform模式的转换。具体操作涉及使用特定的ActivityOptions并调用ActivityManagerService的相关方法。
在Android N上开启freeform功能后,我们可以修改开启freeform功能如何开启freeform功能,但是Google只是的默认行为比较简单,我们只能在任务列表中进入分屏,在分屏状态下点击进入全屏的btn进入全屏,由于前面文章的介绍,freeform和fullscreen只是不同的两个stack,我们可以通过taskid把应用在不同的stack中移动,来达到freeform或者是fullscreen效果。
在把全屏应用编程freeform状态时,我们可以使用如下代码:
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchStackId(FREEFORM_WORKSPACE_STACK_ID);
ActivityManagerService.startActivityFromRecents(int taskId, Bundle bOptions)
这段代码就是启用一个app,但是设置它所在的stack是freeform,从而实现这个应用是freeform状态。这段代码最后会执行到
ActivityStackSupervisor.startActivityFromRecentsInner(...)
这里有几点需要说明:
  • launchStackId就是设置的到移动到的stackid,例如要把app移动到freeform,这里的值就是2.
  • task.stack.mStackId 这里的stackid就是要移动的app,当前的stackid,例如在移动前应用是处于全屏状态,那么这个值就是1.
  • 如果launchStackId跟task.stack.mStackId的值不相同,那么就会就会执行到 moveTaskToStackLocked(…)方法中,这个方法就会修改应用的bounds(即修改要移动app的bounds),在这个方法中需要注意如果是全屏要移动到freeform,task.mBounds是null(因为我们在计算fullscreen时,它的bounds是null,可以这么说全屏应用的bounds就是null),这时会自动获取一个bounds,来根据这个计算要修改应用最终的bounds,如果app的上一个应用状态是从分屏进入到的全屏,在修改成freeform,这个bounds就会是全屏大小,这时显示就会异常,一定要给一个默认的显示bounds值。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值