一 概述
android N的发布,最大的亮点有2个,原生系统对应用分屏的支持和快捷回复。现在只介绍分屏功能,目前最新的Android N系统支持横屏时让两个APP并排,竖屏时上下排放,而在Android TV上,原生系统也支持APP实现画中画。用户还可以在这两个App之间拖动数据,例如将一个App的Activity上的文件拖动到另外一个App的Activity中去。
用户开启分屏模式:
1点击右下角的方块,进入任务管理器,长按一个App的标题栏,将其拖入屏幕的高亮区域,这个App金进入了分屏模式。然后在任务管理器中选择另一个App,单击它使得这个App也进入分屏模式。
2打开一个App,然后长按右下角的方块,此时已经打开的这个App将进入分屏模式。然后在屏幕上的任务管理器中选择另外一个App,单击它使得这个App也进入分屏模式。
3最新发现:下拉通知栏,长按右上角的设置图标,将开启隐藏设置功能 “系统界面调谐器”,进入设置界面,最下方有系统界面调谐器选项,进入后选择 “Other”->“启用分屏上滑手势”,就可以从任务管理器上上滑进入分屏模式了。具体操作是 当一个App已经处于全屏模式时,用手指从右下角的小方块向上滑动 。这个设置将来在正式版可能有变化,所以还是不要太依赖。
二 分屏模式的生命周期
首先要说明的一点是,分屏模式没有改变Activity的生命周期。
官方说法是:在分屏模式下,用户最近操作、激活过的Activity将被系统视为 topmost 。而其他的Activity都属于 paused 状态,即使它是一个对用户可见的Activity。但是这些可见的处于 paused 状态的Activity将比那些不可见的处于 paused 状态的Activity得到更高优先级的响应。当用户在一个可见的 paused 状态的Activity上操作时,它将得到恢复 resumed 状态,并被系统视为 topmost 。而之前那个那个处于 topmost 的Activity将变成 paused 状态。
在分屏模式中,一个App可以在对用户可见的状态下进入 paused 状态,这与以往是不同的。所以你的App在处理业务时,也应该知道自己什么时候应该真正的暂停。例如一个视频播放器,如果进入了分屏模式,就不应该在 onPaused() 回调中暂停视频播放,而应该在 onStop() 回调中才暂停视频,然后在 onStart()回调中恢复视频播放。关于如何知道自己进入了分屏模式,在 Android N 的Activity API中,增加了一个 void onMultiWindowChanged(boolean inMultiWindow) 回调,所以我们可以在这个回调知道自己是不是进入了分屏模式。
当App进入分屏模式后,将会触发Activity的 onConfigurationChanged() ,这与以前我们在处理App从 横竖屏切换 时的方法一样,不同于的地方是这里是宽/高都有所改变,而 横竖屏切换 是宽高互换。我们最好处理好运行时状态的改变,否则我们的App将被重新创建,即重新以新的宽高尺寸 onCreate() 一遍。

如果用户重新调整窗口的大小,系统在必要的时候也会触发 onConfigurationChanged()。如果App的尺寸处于被拖动中还没有完全绘制完成时,系统将暂时用主题中的 windowBackground 属性来填充这些区域。
三 设置APP的分屏模式
如果你适配到了 Android N,android:resizeableActivity 的默认值就是 true ,是默认支持分屏的。该属性是在 AndroidManifest.xml 中的 <application> 或者 <activity> 标签下设置新的属性 android:resizeableActivity="true" 。设置了这个属性后,你的App/Activity就可以进入分屏模式或者自由模式 了。如果这个属性被设为false,那么你的App将无法进入分屏模式,如果你在打开这个App时,长按右下角的小方块,App将仍然处于全屏模式,系统会弹出Toast提示你无法进入分屏模式。
注意:假如你 没有适配到Android N ( target < Android N ),打包App时的 compileSDKVersion < Android N ,你的App也是可以支持分屏的!!!!原因在于:如果你的App 没有 设置 仅允许Activity竖屏/横屏  ,即没有设置类型 android:screenOrientation="XXX" 属性时,运行Android N系统的设备还是 可以 将你的App 分屏!! 但是这时候系统是不保证运行时的稳定性的,在进入分屏模式时,系统首先也会弹出Toast来提示你说明这个风险。

四 Layout attributes
在Android N中,我们可以向 manifest 文件中添加 layout 节点,并设置一些新增加的属性,通过这些属性来设置分屏模式的一些行为,如最小尺寸等。
•android:defaultWidth
•android:defaultHeight
•android:gravity
•android:minimalSize
我们可以给一个 Activity 增加一个 layout 子节点:

      <activityandroid:name=".MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><layoutandroid:defaultHeight="500dp"android:defaultWidth="600dp" android:gravity="top|end"/></activity>

五 支持拖拽
现在我们可以实现在两个分屏模式的Activity之间拖动内容了。Android N Preview SDK中,View已经增加支持Activity之间拖动的API。具体的类和方法,可以参考N Preview SDK Reference,主要用到下面几个新的接口:
•View.startDragAndDrop():View.startDrag() 的替代方法,需要传递View.DRAG_FLAG_GLOBAL来实现跨Activity拖拽。如果需要将URI权限传递给接收方Activity,还可以根据需要设置
View.DRAG_FLAG_GLOBAL_URI_READ或者
View.DRAG_FLAG_GLOBAL_URI_WRITE。
•View.cancelDragAndDrop():由拖拽的发起方调用,取消当前进行中的拖拽。
•View.ClipData里。返回值为前面的android.view.DropPermissions。
六 测试清单
关于功能、性能方面测试,updateDragShadow():由拖拽的发起方调用,可以给当前进行的拖拽设置阴影。
•android.view.DropPermissions:接收方App所得到的权限列表。
•Activity.requestDropPermissions():传递URI权限时,需要调用这个方法。传递的内容存储在DragEvent中的还可以按照下面的操作来进行。
•让App进入,再退出分屏模式,确保此时App功能正常。
•让App进入分屏模式,激活屏幕上的另外一个App,让自己的App进入可见、paused状态。举了例子来讲,如果你的App是一个视频播放器,那么当用户点击了屏幕上另外一个App时,你的App不应该停止播放视频,即使此时你的Activity/Fragment已经接到了onPaused()回调。
•让App进入分屏模式,拖动分栏上的小白线,改变App的尺寸。请在竖屏(两个App一上一下布局)和横屏(两个App一左一右布局)模式下分别进行改变尺寸的操作。确保App不会崩溃,各项功能正常,且UI的刷新没有花费太多时间。
•在短时间内、多次、迅速地改变App尺寸,确保App没有崩溃,且没有发生内存泄露。关于内存使用方面的更详细注意事项,请参考Investigating Your RAM Usage。
•在不同的窗口设置的情况下,正常使用App,确保App功能正常,文字仍然可读,其他的UI元素也没有变得太小,用户仍然可以舒适地操作App。

ANDROID N 分屏设置相关推荐

  1. Android解决分屏情况下背景拉伸问题

    Android解决分屏情况下背景拉伸问题 1.需要新建对应宽度的res资源目录,放入对应的背景图 2.在activity启动后,注册监听根背景size变化getViewTreeObserver().a ...

  2. 三星s20计算机怎么添加到桌面,三星s20+怎么分屏?三星s20系列多窗口分屏设置操作步骤...

    三星s20+怎么分屏?三星s20系列多窗口分屏设置操作步骤来讲一讲吧,三星S20是一款屏幕体验超好的智能手机,它可以运行多窗口,让我们在分屏视图上同时运行两个应用程序.比如我们能一边聊天,一边看视频, ...

  3. windows分屏设置鼠标左右

    windows分屏设置鼠标左右 经常分屏的时候会遇到,默认是从右边进入第二个屏,但是有很多人习惯把副屏放到左边,这样就会很变扭. 有许多人说可以把外界的屏幕作为主屏,但是效果其实用过的人知道很不好.其 ...

  4. android盒子分屏,分屏智投投屏神器免费版 1.7.4 安卓免费版

    分屏智投app能够让用户们快速完成设备投屏功能,多个屏幕管理让大家快速连电视/投影仪等等.更加方便的投屏管理功能,设置窗口分辨率更大化的提高投屏效率,能够同时投屏多个窗口! 分屏智投介绍 多台手机可通 ...

  5. 安卓Unity分屏设置

    1.安卓分屏设置 1Camera 1Canvas :分2个UIPanel(1个作为上部份 1个作为下部份) 2.Camera设置

  6. Goland 包自动智能排序和分屏设置

    一 分屏设置 选择文件,单击右键, Split Right 表示左右分屏: Split Down 表示上下分屏 二 项目包排序 首先需要说明的是,项目中包排序,不同的Goland,设置方式不一样:我用 ...

  7. Android系统(23)---Android 应用分屏

    一.应用分屏介绍 Android 7.0以来,安卓系统新增了分屏显示应用--即在同一个屏幕上同时显示两个应用窗口的特性.在支持分屏的应用可以在"分屏模式"中左右并排或上下并排显示. ...

  8. java如何控制分屏显示,intellij idea 分屏设置 与快捷键

    1.找到分屏功能 File -> setting -> keymap,搜索(注意大小写): Split Vertically 水平分屏 Split Horizontally 垂直分屏 2. ...

  9. Android 应用分屏

    应用分屏适配说明  1. 若您的应用计划支持分屏功能,需要在应用清单文件的 <activity>或 <application>节点中设置分屏属性 android:resizea ...

最新文章

  1. vue.js 2.0实现的简单分页
  2. 转用特征码秒杀各程序语言按钮事件
  3. 【David Silver强化学习公开课】-3:DP
  4. zabbix 监控 Esxi
  5. oracle的group by用法
  6. P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  7. java中的集合_你真的了解Java中的集合类么?
  8. IGNN图卷积超分网络:挖掘隐藏在低分辨率图像中的高清纹理
  9. 拓展名php,取扩展名_php
  10. NO3 cat-xargs-cp-mv-rm-find命令
  11. 好用的MessageFormat类
  12. js设计模式——8.中介者模式
  13. Ubuntu下mysql修改字符集为utf8
  14. 数据库系统概论学习总结
  15. 报错 应用程序池 中asp.net 4.0 自动停止
  16. xps仪器及数据说明
  17. 老男孩python全栈视频教程_老男孩Python全栈7期,Flask全套组件及原理剖析视频教程下载...
  18. javascript 逻辑运算符 和 或 非
  19. Java 实现加减乘除
  20. 垃圾短信分类java_有了这个神器,快速告别垃圾短信邮件

热门文章

  1. 转转前端周刊第三十五期
  2. macOS FTP服务器架设
  3. 第十二章 C语言调试_调试的概念以及调试器的选择
  4. linux调试器(dbg)使用
  5. SpringBoot整合过滤器、拦截器
  6. 全能中间件 REST API 使用手册
  7. 顾客购物免单java_从买单到免单,他们告诉你这是真的!
  8. 七夕王者服务器维护什么时间结束,王者荣耀S20赛季什么时候结束 S20赛季具体结束日期...
  9. PythonChallenge题解
  10. Android JetPack组件之ViewModel状态的保存(程序在后台被系统杀死数据也存活)