android 分屏相关知识点

分屏比例最小值修改
android/frameworks/base/core/res/res/values/dimens.xml的值default_minimal_size_resizable_task
注意:这个值只能比220大,因为如果小的话CTS无法通过,因为CTS里面把这个值写死了220(ActivityAndWindowManagersState.java的DEFAULT_RESIZABLE_TASK_SIZE_DP = 220)

横屏支持分屏比例修改
android/frameworks/base/core/res/res/values-land/config.xml的值config_dockedStackDividerSnapMode,竖屏的值是0,横屏是2,所以横屏在创建分屏参数时,不会创建分屏参数。


分屏模式不支持衡竖屏切换
android/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java里面有个updateRotation方法,它时执行衡竖屏切换操作的,只需要在这判断是否处于分屏模式,如果是分屏模式,直接返回即可。
@Override
public void updateRotation(boolean alwaysSendConfiguration, boolean forceRelayout) {
if(DOCKED_INVALID == getDockedStackSide()) {
updateRotationUnchecked(alwaysSendConfiguration, forceRelayout);
}
}

分屏状态下,按下home,分屏会进入最小化,此时如果launcher支持resizeable,则分屏窗口调整到桌面上,桌面大小减小,如果launcher不支持resizeable,则分屏最小化,隐藏到状态栏后边。
第一种情况:
DockedStackDividerController.java控制分屏状态,当DisplayContent通知controller的方法notifyDockedStackExistsChanged时,setMinimizedDockedStack(boolean minimizedDock, boolean animate),这里面会判断当前桌面是否resizeable,然后走向分支:
if (isHomeStackResizable()) {
notifyDockedStackMinimizedChanged(minimizedDock, true /* animate */,
true /* isHomeStackResizable */);
minimizedChange = true;
}
第一种情况如果不支持,就走向下面这种情况
setMinimizedDockedStack(boolean minimized),该方法里面会调用TaskStack的setAdjustedForMinimizedDock,然后层层调用会走到adjustForMinimizedDockedStack方法,mTmpAdjustedBounds控制最小化分屏时的高度大小(状态栏的高度,PhoneWindowManager.java的mDockTop值是statusbar的高度,分屏后的起始位置就是这个值控制)

如何退出分屏
只需要把分屏栈中的task移除,移动到全屏栈即可,比如在systemUI中调用mWindowManagerProxy.dismissDockedStack(),它的实现是
private final Runnable mDismissRunnable = new Runnable() {
@Override
public void run() {
try {
ActivityManager.getService().moveTasksToFullscreenStack(
DOCKED_STACK_ID, false /* onTop */);
} catch (RemoteException e) {
Log.w(TAG, "Failed to remove stack: " + e);
}
}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值