Android多窗口分屏(原生方法)
来源:互联网 发布:列管换热器 计算软件 编辑:程序博客网 时间:2024/05/17 23:24
事实上KitKat已经可以实现多窗口分屏,只是功能不全,Google并没有把这个功能提供给用户。
使用am stack boxes可以查看当前系统存在的Activity Stack:
output:
Box id=1 weight=0.0 vertical=false bounds=[0,38][800,1208]Stack= Stack id=1 bounds=[0,38][800,1208] taskId=2: com.android.calendar/com.android.calendar.AllInOneActivity taskId=3: com.android.deskclock/com.android.deskclock.DeskClockBox id=0 weight=0.0 vertical=false bounds=[0,38][800,1208]Stack= Stack id=0 bounds=[0,38][800,1208] taskId=1: net.lnmcc.launcher/net.lnmcc.launcher.Launcher
从上面的输出我们看到当前有两个Stack,id分别为0和1。在Stack 1中存在了两个Task,这两个Task分别是Calender和DeskClock应用。而Launcher则是在Stack 0中。实际上,你会发现Launcher始终独占Stack 0。Android有如下规则:
- HOME stack: This is the stack with id = 0. This stack is used by the Launcher activities. When several users run Lanchers on one device, they will all belong to this stack. Other than that, systemui activities are also launched in it.
- Applications stack: The id for this stack could be any number. All activities that are neither Launcher apps or systemui activities are run here (for all users).
得到了上面关于Stack和Task的信息后就可以按需要使用am stack create来进行分屏显示了:
效果图如下(上半屏为日历应用,下半屏为时钟应用):
使用上面的命令你可以控制两个APP的相对位置,各自的大小等等。。。具体参数说明如下:
Syntax:
am stack create <int1> <int2> <int3> <float1>
- <int1>: TASK_ID – the id for the existing task that you want a separate stack for.
- <int2>: RELATIVE_STACK_BOX_ID – an existing stack id. The postion of the new stack will be relative to this one.
- <int3>: POSITION – the relative position of the stack. Could be any one of these values:
- 0: before relative stack (depends on RTL/LTR configuration)
- 1: after relative stack (depends on RTL/LTR configuration)
- 2: to left of relative stack
- 3: to right of relative stack
- 4: above relative stack
- 5: below relative stack
- 6: displayed on a higher layer than the relative stack (unused)
- 7: displayed on a lower layer than the relative stack (unused)
- <float1>: WEIGHT – a number between 0.2 – 0.8 inclusive
再次运行am stack boxes来查看一下究竟发生了什么:
output:
Box id=1 weight=0.5 vertical=true bounds=[0,38][800,1208]First child= Box id=2 weight=0.0 vertical=false bounds=[0,38][800,623] Stack= Stack id=2 bounds=[0,38][800,623] taskId=2: com.android.calendar/com.android.calendar.AllInOneActivitySecond child= Box id=3 weight=0.0 vertical=false bounds=[0,623][800,1208] Stack= Stack id=1 bounds=[0,623][800,1208] taskId=3: com.android.deskclock/com.android.deskclock.DeskClockBox id=0 weight=0.0 vertical=false bounds=[0,38][800,1208]Stack= Stack id=0 bounds=[0,38][800,1208] taskId=1: net.lnmcc.launcher/net.lnmcc.launcher.Launcher
我们看到Box 1中有了2个子Box,分别用来存放Calendar和DeskClock,并且bounds的值给出了他们各自的显示区域坐标。
2 0
- Android多窗口分屏(原生方法)
- Android 分屏模式-多窗口支持
- Android 原生已經支持分屏?
- Android N分屏(多窗口)适配
- Android 7.0中的多窗口-分屏-实现解析
- Android framework学习笔记 -- 原生分屏原理
- Ubuntu终端多窗口分屏Terminator
- VIM窗口分屏
- Android N 分屏(多窗口支持)+ConstraintLayout简单使用
- android google 分屏 多窗口 popup无法显示故障分析
- Unity3D 调用Android原生方法
- Unity3D 调用Android原生方法
- Unity3D 调用Android原生方法
- Unity3D 调用Android原生方法
- ReactNative调用Android原生方法
- iOS-UItableview 分割线(自定义+原生)方法总结
- 分窗口与多视图
- android google 分屏 多窗口 按home键界面错乱故障分析(一)分屏的整个流程分析
- UIToolbar(工具栏)
- [心情]回顾&一个新的开始
- 截图 iOS
- canvas延伸-WebGL(three.js)
- C++ 多态 指针转换
- Android多窗口分屏(原生方法)
- 计算NSString界面展示所需的高和宽
- 修改iOS StatusBar 字体颜色为白色
- HuaWei-USG6000系列防火墙清除Console登录密码
- ios TableView那些事(三十 二)Tableview一直显示滚动条
- VisualSVN Server安装和搭建(一)
- 26-main方法不能执行
- SUSAN角点及边缘检测方法详解
- Java多线程编程实战指南(设计模式篇)——互动出版网