不瞞大家,我在湖北的這 2 個月,體驗了 Android 的這個功能,真香!

一、序

大家好,我是承香墨影。不瞞大家說,我已經在湖北待了 2 個多月了。

前期一直處於封禁狀態,隨着疫情的好轉,現在已經可以出去喫碗熱乾麪了。

在家遠程辦公的這段時間,除了正常的工作學習之外,精神娛樂也少不了,肉身和空間上的限制,也無法阻礙對精神世界的追求。但無論怎麼玩出了花樣,多數時候還是脫離不了手機這個小小的屏幕。

最近我深度體驗了 Android 中的一個功能,一個以前讓我嗤之以鼻,覺得沒有任何大用的功能,最近深度體驗之後,發現真香。

這個功能就是 Android 的分屏功能。在家的這段時間,發現大概只有手機的屏幕,纔是自己能夠獨享的。

雖然 App 之間的切換,已經可以做到非常的順暢,但是如果你在刷劇的時候還要切到微信回覆消息,之後再切回來,這樣的體驗無疑是非常差的。還別說有時候我無法忍受劇情的拖沓,總想着看着劇的同時再幹點什麼,例如刷個淘寶京東什麼的。

這種需求,分屏模式就可以滿足。

上圖中就是我比較常用的 2 個場景,刷劇和遊戲之餘,還想幹點別的,例如聊天、購物等等。

那我們今天就來聊聊 Android 的多窗口模式,以及使用它需要注意的一些點。另外有些 App 禁用了多窗口模式,但是依然有辦法強制多窗口,我們一起來聊聊。

二、Android 的分屏模式

2.1 什麼是多窗口模式

Android 從 N(7.0,API Level 24) 開始支持多窗口模式,或者叫分屏模式,即允許在屏幕上同時打開多個 App,同時顯示多個窗口。

近幾年的新手機,應該都是緊跟最新的系統,7.0 的發佈也有好幾年了,我想大家應該都可以享受到。

其實分屏模式使用起來很簡單,在最近打開任務窗口(Overview Screen)中,可以長按 App,選擇進入分屏模式。

2.2 分屏的生命週期

分屏模式支持同時打開 2 個 App 或者打開某個 App 的 2 個頁面,當然這需要特殊的技巧,後面會說到。

說回到生命週期,當切換分屏模式時,如果不做任何處理,Activity 會觸發銷燬再重建,這個過程相信大家應該比較熟悉,畢竟切換個屏幕方向,Activity 默認都會銷燬重建。

如果想禁用 Activity 銷燬重建,則配置 android:configChanges 屬性即可。

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

分屏模式還增加了一個系統回調 onMultiWindowModeChanged(isInMultiWindowMode) 方法,可以通過它的參數 isInMultiWindowMode 參數判斷多屏模式的進入和退出。

除此之外,如果想要主動判斷當前是否處於分屏模式,可以通過 Activity 或 Fragment 的 inMultiWindow() 進行判斷。

2.3 打開分屏的頁面

默認情況下,同一個 App 的多個 Activity 會共用同一個窗口,且無法分配到不同的窗口中。

所以我們在分屏模式下,打開某個頁面,實際上還是在當前窗口中打開,如果想讓新頁面被分配到不同的窗口中,可以通過給 Intent 設置 FLAG_ACTIVITY_LAUNCH_ADJACENT 標識來實現。

當處於分屏模式下時,通過該 Flag,新 Activity 就會在新的棧中被啓動,以此實現 2 個 Activity 被放置在不同的窗口中。

Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

實際效果如下:

需要注意的是,該 Flag 隨着 Android N 的支持,所以在使用時需要判斷是否大於等於 Api Level 24。

另外我們也無需額外的判斷是否處於分屏狀態,如果當前不處於分屏狀態,則該 Flag 的設置無效。

2.4 支持分屏

前面提到,分屏模式由 Android 7.0 引入。那麼如果 targetSdkVersion 被設置爲 N 及以上時,分屏是默認開啓的,反之則是默認關閉。

分屏模式由 Application 的 android:resizeableActivity 屬性控制,true 爲開啓,false 爲關閉。我們可以通過這個屬性,主動管理分屏模式。

這就把是否支持分屏模式的權限,交到了開發者手中,但是我作爲一個使用者,我在分屏模式下,打開某個 App 時提示我不支持,其實是一個非常不好的體驗。

例如今日頭條,本身是不支持分屏模式的,當我們嘗試以分屏模式打開它的時候,會以全屏模式打開 App,並且彈出一個 Toast 提示。

這種體驗肯定是非常差勁的,那麼我們有什麼辦法讓 App 強制支持分屏模式呢?

這就需要藉助「開發者模式」了,通過「開發者模式」下的 2 個開關,來強制讓所有 App 都支持分屏模式,並且可以調整窗口大小。

需要注意的是,調整這 2 個開關,是需要重啓後纔會生效。同時這種強制的行爲本身也是開發者預料之外的,所以如果出現一些小問題也是符合預期的。

當我們把 2 個開關打開後,所有的 App 都能夠支持分屏模式,並且可以調整窗口大小。

三、小結時刻

分屏這個功能就說到這裏,其實對於開發者來說,多數時候我們並不需要特殊設置什麼,當 targetSdkVersion 爲 24 的時候,其實已經默認支持。當然如果我們想要針對分屏模式做一些功能,也有對應的 Api 支持。

最後簡單小結一下:

1. 分屏模式在 Android N 開始是默認打開的,通常不需要做什麼也可以適配;

2. 可以通過 onMultiWindowModeChanged() 監聽多窗口模式的切換,也可以通過 inMultiWindow() 主動判斷當前是否是多窗口模式;

3. 如果不想支持分屏模式,可以通過 android:resizeableActivity 來控制;

4. 如果想要強制全部 App 支持分屏模式,可以在「開發者模式」中設置,讓所有 App 都強制支持分屏模式;

今天就到這裏,本文對你有幫助嘛?歡迎留言、轉發、點好看,一鍵三連


熱文推薦:

公衆號後臺回覆成長『成長』,將會得到我準備的學習資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章