2016年3月9号,Android N Preview1发布,带来了一些新的特性,关于特性的介绍有很多资料,我在这里就不详细展开了,可以看Android N介绍视频,其中的Multi-window support和Notifications对之后Android App的设计和开发会带来一些新的尝试,虽然Android N正式发布还需要一段时间,但我们作为Android开发人员也需要提前进行了解,今天就在这里给大家介绍下。
Android N Preview开发环境配置
Tip:在配置过程中其他都还好,就是将Java7替换到Java8中的时候,发现配置完成Android Studio仍然报错,最后将Java7删除,重启Android Studio解决,可能是Android Studio 2.1的bug。
Multi-window support
背景
多屏分任务的支持,其实这在之前三星平板和Note手机中就已经支持了,不算什么高大上的特性,但Android原生系统支持还是第一次,随着手机屏幕不断扩大,分屏带来效率的提升,也使得这一特性变得让人很期待。
开发
- 配置App Multi-Window模式
在AndroidManifest里新增如下属性:
<activity
android:name=".YourActivity"
android:launchMode="singleInstance"
android:taskAffinity="">
<layout
android:defaultHeight="500dp"
android:defaultWidth="750dp"
android:gravity="top|end"
android:minimalSize="500dp" />
</activity>
提供的属性
android:resizeableActivity=["true" | "false"]
如果设置为true,则该Activity可以在分屏和自由模式(freeform mode)中打开,否则就不能打开,该值默认为true。
android:supportsPictureInPicture=["true" | "false"]
如果设置为true,则该Activity可以在PIP模式中打开,如果android:resizeableActivity=false,则忽略该属性,意思就是哪怕android:supportsPictureInPicture=true,也是无效的。关于PIP模式,在下面会提到。
android:defaultHeight
在自由模式中打开的默认高度
android:defaultWidth
在自由模式中打开的默认宽度
android:gravity
在自由模式中打开的位置
android:minimalSize
在自由模式中打开的最小宽高
提供的方法
Activity.inMultiWindow()
判断该Activity是否支持multi-window模式
Activity.inPictureInPicture()
判断该Activity是否支持picture-in-picture模式,可以认为,Activity.inPictureInPicture()返回true,则Activity.inMultiWindow()也会返回true
Activity.onMultiWindowChanged(boolean inMultiWindow)
如果该Activity进入或者退出multi-window模式,该方法就会被回调,如果进入,则inMultiWindow=true,否则inMultiWindow=false
Activity.onPictureInPictureChanged(boolean inPictureInPicture)
如果该Activity进入或者退出picture-in-picture模式,该方法就会被回调,如果进入,则inPictureInPicture=true,否则inPictureInPicture=false
Picture-in-picture
背景
Picture-in-picture(PIP)模式可以在固定窗口里运行一个视屏Activity,让用户处理多线程,提高效率。
开发
- 配置Picture-in-picture模式
在AndroidManifest里新增如下属性:
android:supportsPictureInPicture="true"
- 切换你的Activity到PIP模式
Activity.enterPictureInPicture()
- 在PIP模式里对UI的处理
当该Activity进入PIP模式时,可以移除不必要的UI组件,只显示视屏
@Override
public void onPictureInPictureChanged(boolean inPictureInPicture) {
if (inPictureInPicture) {
// 在进入PIP模式后进行隐藏处理
...
} else {
// 在退出PIP模式后进行恢复处理
...
}
}
- 在PIP模式中继续进行视屏播放
进入PIP模式时,系统会认为该Activity处于paused状态,一般而言,在paused状态会暂停视屏的播放,这里就需要PIP模式进行区分处理,在PIP模式中继续播放。
@Override
public void onPause() {
if (inPictureInPicture()) {
...
}
...
}
参考
multi-window
picture-in-picture
Set Up the Preview
原始地址: http://www.jianshu.com/p/d6f9d2ee64a2,欢迎关注我的微博