前言

 在智能手机更新换代越来越快,手机屏幕越来越大,手机可以做的事情越来越多,人们已经离不开智能手机了,甚至有的人开始在用手机办公了。在大屏幕手机上,如果一个手机可以一边播放视频,一边上着网,那种体验是非常爽的。终于,在Android 7.0(N)(API 24)引入了多窗口(Android N 的 Nexus Player还有画中画)的支持,也就是分屏显示,可以是上下排列,也可以是左右排列,可以在播放视频的同时上网,购物等等。在以前的Android原生系统中是没有这项功能的,以前的系统版本中有的手机支持多窗口模式,这也是由开发商自己在Android原生系统的基础上进行了定制。

1. 启动多窗口模式

在以前编写的应用程序默认是支持多窗口模式的,所以,启动多窗口模式不需要做特别的操作,只需在Android N版本的手机上通过以下两种方式来启动多窗口模式(注意姿势))

  1. 打开任意应用,长按overview(菜单)按钮即可使得当前应用进入多窗口模式(自由形状模式);
  2. 在overview列表中长按应用Activity的标题,将它拖到屏幕突出显示区域,可进入多窗口模式。

   

2. 多窗口下Activity的生命周期

 多窗口模式下不会改变Android的生命周期,处于运行状态的Android也只会有一个(最近与用户交互的),其他的窗口的Activity虽然可见但还是处于暂停状态。当用户与另外一个窗口的Activity交互的时候,则之前的窗口的Activity则处于暂停状态(会调用onPause()方法),当前与用户交互的Activity处于运行状态(调用onResume()方法)。

默认情况下,在应用进入多窗口模式(自由形状模式)的时候Activity会重新创建,就像屏幕横竖屏切换一样,这时进入多窗口的Activity的生命周期为:

就像横竖屏切换一样,我们也可以通过设置当Activity进入多窗口时不重新创建,只需将Activity的configChange属性配置成一下即可

android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"

程序进入多窗口模式,默认会创新创建,如下图:

设置android:configChanges="orientation|keyboardHidden|screenSize|screenLayout",则进入多窗口模式Activity只会暂停不会重新创建

多窗口模式下切换交互窗口(这里只是点击了mutiwindow的Activity),可以看到当前mutiwindow处于顶级Activity(运行状态),而launchmode则调用则处于暂停状态

这时点击launchmode的Activity,同理,这时launchmode的Activity处于运行状态,mutiwindow的Activity则处于暂停状态。

3. 多窗口的相关配置

 在开发Android N(7.0)的应用的时候,我们可以对Activity是否支持多窗口模式(开启或禁用)及显示方式进行一些配置。

(1)开启或禁用多窗口模式

通过Activity或Application的android:resizeableActivity属性配置可以开启(true)或禁用(false),该属性默认值为true,也就是说多窗口模式默认是被开启的。当Activity开启了多窗口模式时,它可以分屏显示并且可以自由改变大小,而被禁用多窗口模式的Activity总是以全屏显示。

android:resizeableActivity=["true" | "false"]

禁用多窗口模式下尝试进入多窗口模式,系统会提示App does`t support split screen(不支持分屏)

(2)布局属性layout

对于Android N,Activity标签可以配置一个layout的子标签,layout子标签的属性值会改变Activity在多窗口模式下的状态行为,如下面的配置就指定了Activity在多窗口模式下的默认大小,位置及最小尺寸。

<activity android:name=".SecondActivity"><layout android:defaultHeight="500dp"android:defaultWidth="600dp"android:gravity="top|end"android:minimalHeight="450dp"android:minimalWidth="300dp" />
</activity>

其中:

属性 作用
android:defaultWidth 以多窗口模式启动时 Activity 的默认宽度
android:defaultHeight 以多窗口模式启动时 Activity 的默认高度
android:gravity 以多窗口模式启动时 Activity 的初始位置。请参阅 Gravity 参考资料,了解合适的值设置。
android:minimalHeight、android:minimalWidth 分屏和自由形状模式中 Activity 的最小高度和最小宽度。 如果用户在分屏模式中移动分界线,使 Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。

(3)被禁用的功能

  1. 某些系统 UI 自定义选项将被禁用;例如,在非全屏模式中,应用无法隐藏状态栏;
  2. 系统将忽略对 android:screenOrientation 属性所作的更改。

4. 多窗口模式状态监听

系统为我们提供了相应的监听方法以便我们可以判断Activity是否处于多窗口模式及进入退出多窗口模式时可以执行响应的业务逻辑。

  1. Activity.isInMultiWindowMode():判断Activity 是否处于多窗口模式。
  2. Activity.onMultiWindowModeChanged():Activity 进入或退出多窗口模式时系统将调用此方法。 在 Activity 进入多窗口模式时,系统向该方法传递 true 值,在退出多窗口模式时,则传递 false 值。

以上两个方法不仅在Activity可用,在Fragment也是同样可用的(Fragment版本)。

如:

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onPause() {super.onPause();if(isInMultiWindowMode()){Toast.makeText(this,"进入多窗口模式",Toast.LENGTH_SHORT).show();}Log.d(TAG,"onPause()");
}@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {super.onMultiWindowModeChanged(isInMultiWindowMode);if(isInMultiWindowMode()){Toast.makeText(this,"进入多窗口模式",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"退出多窗口模式",Toast.LENGTH_SHORT).show();}
}

则(注意需要打开多窗口支持android:resizeableActivity="true"):

Android N 多窗口模式相关推荐

  1. Android freeform多窗口模式和Desktop电脑模式使能

    Android freeform多窗口模式和Desktop电脑模式使能相关code: DecorView DecorCaptionView ActivityTaskManagerService 即AT ...

  2. Android 中 activity 窗口模式的实现

    有一定Andriod编程基础的人都知道Andriod中activity之间的界面切换,第二个activity的界面会覆盖第一个.那么能否让第二个activity的界面以窗口的形式展示出来,而不完全覆盖 ...

  3. Android N 多窗口模式应用开发

    我们都知道,在最新的Android N系统中,加入了一个新的功能,就是多窗口模式.多窗口模式允许我们在屏幕上显示两个窗口,每个窗口显示的内容不同,也就是说,我们可以一遍看电视剧,一边聊微信. 这里我们 ...

  4. 【记录】Android禁止多窗口模式

    如果当前项目的 targetSdkVersion >= 24,可以在 AndroidManifest.xml的<application>或<activity>标签中加入如 ...

  5. Android N 多窗口模式,你需要知道的一切

    Android N中最大.最引人注意的变化就是Mutil-window模式.对于一个开发者,我们最关心的就是:Mutil-window模式下怎么配置mutil-window模式.Activity的生命 ...

  6. 多窗口模式(multi-window mode)

    多窗口模式(multi-window mode):是android7.0(API24)添加的,可以有分屏模式(split-screen mode),画中画模式( Picture-in-Picture ...

  7. Android 7.0 多窗口模式

    多窗口模式简介 由于手机屏幕大小的限制,传统情况下一个手机只能同时打开一个应用程序.从Android 7.0 开始引入多窗口模式功能,如许在一个屏幕中同时打开两个应用程序. 进入多窗口模式 注意:使用 ...

  8. android应用窗口模式,[技巧]如何启用Android N开发者预览版中的“自由窗口”模式...

    这里是Android N开发者预览版"自有窗口"模式的一些实际演示截图. 对于已经参加了"Beta Program"的人们来说,通过OTA获取Android N ...

  9. Android多窗口模式(分屏模式)

    Android N 支持多窗口模式,或者叫分屏模式,即在屏幕上可以同时显示多个窗口. 在手机模式下,两个应用可以并排或者上下同时显示,如图 1 所示,屏幕上半部分的窗口是系统的 CLOCK 应用,下半 ...

最新文章

  1. 共享windows目录给vm linux,将windows中的文件夹共享给Linux虚拟机
  2. python中import os_python import os
  3. php 防止表单重复提交
  4. 计算机二级vb和vba,读取本机硬件信息的VBA代码
  5. mysql 1045 登录失败
  6. C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程
  7. 如何使用PowerShell将VS Code扩展导出到另一台计算机
  8. 二阶振荡环节的谐振频率_晶振频率稳定性的两个重要因素
  9. OpenStack Trove2
  10. KST1G SD卡脚本提取JPG
  11. 一个例子搞懂单纯形法大M法和两阶段法
  12. 反向传播算法带动了业界使用两层神经网络研究的热潮
  13. 灵魂 我·将·归·来·开·放
  14. 虚拟机 服务器 root,虚拟机切换到root账户
  15. 搜狐公司副总裁 方刚 先生谈《胜于言传——网站内容制胜宝典》
  16. 关于Telegram广告的那些事: 推广原因及推广途径
  17. C语言_写一个函数:求给定数组的中位数
  18. 台式电脑打不开计算机c盘,电脑打不开显示C盘损坏怎么办
  19. 【数据分析师_04_Python数据分析基础】003_Pandas时序分析(pd.tseries 中的节假日功能)
  20. 博途V15TIA Portal V15S7-PLCSIM V15仿真时出现(数值无法写入PLC)解决方案

热门文章

  1. 【并查集】B017_LC_婴儿名字(非常难搞)
  2. 利用Python爬取王者荣耀英雄皮肤!
  3. 把屏幕截到的图片做成教程比较好的软件APP,SoftWare.仅用于PC端。WIN10 WIN7通用
  4. LeetCode专题:回溯与图论(持续更新,已更18题)
  5. srs视频服务环境搭建简单流程
  6. 上海师范大学转专业计算机培训学校,上海师范大学对外汉语学院转专业条件
  7. 二套小清新(APP界面)
  8. Autodesk VAULT Products 2022
  9. 【java】以制表位打印多个变量
  10. 浅谈直播教育平台开发成本