Android 7.0 SystemUI(2)--Multi-Window多窗口模式

从Android7.0开始,Google原生加入了应用多窗口支持,相关特性可查看

多窗口支持


本文涉及到的代码

frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
frameworks/base/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java 
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java 
frameworks/base/core/java/android/app/ActivityManager.java
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/Recents.java 
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java 
frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java.java

SystemUI在启动过程中会启动Divider,主要是管理分屏分割线的

frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
   private final Class<?>[] SERVICES = new Class[] {
            com.android.systemui.tuner.TunerService.class,
            com.android.systemui.keyguard.KeyguardViewMediator.class,
            com.android.systemui.recents.Recents.class,
            com.android.systemui.volume.VolumeUI.class,
            Divider.class,
            com.android.systemui.statusbar.SystemBars.class,
            com.android.systemui.usb.StorageNotification.class,
            com.android.systemui.power.PowerUI.class,
            com.android.systemui.media.RingtonePlayer.class,
            com.android.systemui.keyboard.KeyboardUI.class,
            com.android.systemui.tv.pip.PipUI.class,
            com.android.systemui.shortcut.ShortcutKeyDispatcher.class
    };


该类比较简单

frameworks/base/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java
/**
 * Controls the docked stack divider.
 */
public class Divider extends SystemUI {
    private DividerWindowManager mWindowManager;
    private DividerView mView;
    ...
    private DockDividerVisibilityListener mDockDividerVisibilityListener;
    ...
    private ForcedResizableInfoActivityController mForcedResizableController;

主要有几个比较重要的对象
DividerWindowManager--主要是封装了 WindowManager

frameworks/base/packages/SystemUI/src/com/android/systemui/stackdivider/DividerWindowManager.java
/**
 * Manages the window parameters of the docked stack divider.
 */
public class DividerWindowManager {

    private static final String WINDOW_TITLE = "DockedStackDivider";

    private final WindowManager mWindowManager;
    private WindowManager.LayoutParams mLp;
    private View mView;

    public DividerWindowManager(Context ctx) {
        mWindowManager = ctx.getSystemService(WindowManager.class);
    }

    public void add(View view, int width, int height) {
        mLp = new WindowManager.LayoutParams(
                width, height, TYPE_DOCK_DIVIDER,
                FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL
                        | FLAG_WATCH_OUTSIDE_TOUCH | FLAG_SPLIT_TOUCH | FLAG_SLIPPERY,
        
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值