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.lxweimin.com/p/d6f9d2ee64a2,歡迎關注我的微博