1. 程式人生 > 程式設計 >淺談 Android 7.0 多視窗分屏模式的實現

淺談 Android 7.0 多視窗分屏模式的實現

從 Android 7.0 開始,Google 推出了一個名為“多視窗模式”的新功能,也就是我們常說的“分屏模式”。那麼,這個功能有什麼用呢?作為開發者,我們又能做些什麼?

Android 7.0 添加了對同時顯示多個 APP 的支援。在手持裝置上,兩個 APP 可以在分屏模式下並排執行。

嗯,大概就是這樣:

分屏模式的適配

我們如何才能讓自己的 APP 支援分屏模式呢?

若專案的targetSDKVersion 大於等於24,那麼可以在AndroidManifest.xml 檔案的Application 或Activity 節點通過設定android:resizeableActivity=["true" | "false"] 來控制整個 APP 或某個 Activity 是否支援分屏。該屬性的預設值是true ,也就是說,如果不設定該屬性,在支援分屏的裝置上,預設是可以分屏的。

若專案的targetSDKVersion 小於24,那麼執行在支援分屏的裝置上,預設可以分屏。這時如果需要禁止分屏,需要在AndroidManifest.xml 檔案的Application 或Activity 節點設定android:screenOrientation 屬性來控制整個 APP 或 某個 Activity 的螢幕方向,從而控制整個 APP 或某個 Activity 禁止分屏。

分屏模式的監聽

能不能在程式碼中監聽 APP 是否進入分屏模式呢?答案是能。由於 APP 在分屏模式發生改變時會執行onMultiWindowModeChanged 方法,因此我們在 Activity 中重寫這個方法就可以實現分屏的監聽了。

@Override
 public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
  super.onMultiWindowModeChanged(isInMultiWindowMode);
  // 判斷當前是否為分屏模式
  if (isInMultiWindowMode) {
   // 已進入分屏模式
  } else {
   // 未進入分屏模式
  }
 }

分屏模式下的生命週期

需要注意的是:進入和退出分屏模式時,Activity 的生命週期。

進入分屏模式時,Activity 的生命週期:

onPause()->onStop()->onMultiWindowModeChanged()->onDestroy()->onCreate()->onStart()->onResume()->onPause()


退出分屏模式時,Activity 的生命週期:

onStop()->onDestroy()->onCreate()->onStart()->onResume()->onPause()->onMultiWindowModeChanged()->onResume()

可以看出,在進入分屏模式時,Activity 先執行onMultiWindowModeChanged 方法,再重建自己。在退出分屏模式時,Activity 先重建自己,再執行onMultiWindowModeChanged 方法。

這樣呢會有一個問題,我們的 APP 進入分屏模式時,在onMultiWindowModeChanged 方法中如果有對 UI 等的操作,經過之後的自動重建就沒有效果了。為了防止這種情況,需要在AndroidManifest.xml 的Activity 節點設定以下屬性:

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

設定了這個屬性,在進入分屏模式時,Activity 就不會自動重建了。

分屏模式的判斷

我們可以通過 Activity 的isInMultiWindowMode() 方法獲取當前是否進入分屏模式,該方法返回true 表示當前已進入分屏模式,返回false 則表示當前未進入分屏模式。

if (isInMultiWindowMode()) {
  // 已進入分屏模式
 } else {
  // 未進入分屏模式
 }

分屏模式下開啟 Activity

如果 APP 在分屏模式下開啟 Activity 時,為 Intent 設定了Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT 和Intent.FLAG_ACTIVITY_NEW_TASK 標誌,那麼新開啟的 Activity 將顯示在當前 APP 的另一側。例如下面的程式碼:

Intent intent = new Intent(this,NewActivity.class);
 intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT|Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);

如圖,原始 Activity 分屏後顯示在螢幕上半部分,新開啟的 Activity 顯示在原始 Activity 下方(螢幕的下半部分)。

到此這篇關於淺談 Android 7.0 多視窗分屏模式的實現的文章就介紹到這了,更多相關Android7.0 多視窗分屏內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!